35. テストコードを追加
n追加するテストコードに対応する仕様
• aが正,bが負なら
• a > bなら結果a+bは正
• a < bなら結果a+bは負
a > bの場合
a < bの場合
def test_add_a0(self):
val = myadd(0, 6)
self.assertEqual(6, val)
def test_add_b0(self):
val = myadd(2, 0)
self.assertTrue(2, val)
def test_add_pn_a_gt_b(self):
val = myadd(4, -1)
self.assertTrue(val > 0)
def test_add_pn_a_lt_b(self):
val = myadd(-1, 4)
self.assertTrue(val < 0)
36. 再度テストを実行:失敗
nコードを書いていない
• 失敗するべき
• 失敗したからコードを書ける
$ docker compose exec mypython python -m unittest test_add.py
....FF.
======================================================================
FAIL: test_add_pn_a_gt_b (test_add.TestMyAdd)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/mnt/test_add.py", line 29, in test_add_pn_a_gt_b
self.assertTrue(val > 0)
AssertionError: False is not true
...
----------------------------------------------------------------------
Ran 7 tests in 0.002s
FAILED (failures=2)
$
37. テストを成功するようにコードを追加
n作成するコードに対応する仕様
• aが正,bが負なら
• a > bなら結果a+bは正
• a < bなら結果a+bは負
補足:
ここでは仕様に忠実に実
装している
(単なる和の計算だけ
ど)
def myadd(a, b):
if a > 0 and b > 0:
return a + b
if a < 0 and b < 0:
return a + b
if a == 0:
return b
if b == 0:
return a
if a > 0 and b < 0:
if a > b:
return a + b
if a < b:
return a + b
return 0
a > bの場合
a < bの場合
38. $ docker compose exec mypython python -m unittest test_add.py
.....F.
======================================================================
FAIL: test_add_pn_a_lt_b (test_add.TestMyAdd)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/mnt/test_add.py", line 33, in test_add_pn_a_lt_b
self.assertTrue(val < 0)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 7 tests in 0.001s
FAILED (failures=1)
$
再度テストを実行:成功...あれ?
nコードを書いた
• テストは成功するべき
• 失敗するならデバッグして修正...?
a < bの場合が
失敗している
40. コードとテストコードの修正
diff --git a/test_add.py b/test_add.py
index ed754ff..a16ec50 100644
--- a/test_add.py
+++ b/test_add.py
@@ -29,7 +29,7 @@ class TestMyAdd(unittest.TestCase):
self.assertTrue(val > 0)
def test_add_pn_a_lt_b(self):
- val = myadd(-1, 4)
+ val = myadd(1, -4)
self.assertTrue(val < 0)
diff --git a/compute.py b/compute.py
index 97424a8..dc5fd2b 100644
--- a/compute.py
+++ b/compute.py
@@ -13,9 +13,9 @@ def myadd(a, b):
return a
if a > 0 and b < 0:
- if a > b:
+ if abs(a) > abs(b):
return a + b
- if a < b:
+ if abs(a) < abs(b):
return a + b
return 0