6. ユニットテスト
def is_prime(num: int) -> bool:
"""
素数かどうか判定する
"""
if num < 2:
return False
i = 2
while i * i < num:
if num % i == 0:
return False
i = i + 1
return True
はんなりPython #52 ゆるいLT会
7. ユニットテスト
class TestSomeFunction(unittest.TestCase):
def test_is_prime_01(self):
# 1は素数じゃない
result: bool = is_prime(1)
self.assertFalse(result)
def test_is_prime_02(self):
# 2は素数
result: bool = is_prime(2)
self.assertTrue(result)
def test_is_prime_53(self):
# 57は素数
result: bool = is_prime(53)
self.assertTrue(result)
def is_prime(num: int) -> bool:
"""
素数かどうか判定する
"""
if num < 2:
return False
i = 2
while i * i < num:
if num % i == 0:
return False
i = i + 1
return True
8. コードが間違ってたら
コードが正しかったら
$ python3 -m unittest discover test
..F
======================================================================
FAIL: test_is_prime_53 (test_some_function.TestSomeFunction)
----------------------------------------------------------------------
Traceback (most recent call last):
File "**********/test/test_some_function.py", line 26, in test_is_prime_53
self.assertTrue(result)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 3 tests in 0.004s
FAILED (failures=1)
$ python3 -m unittest discover test
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
$
9. モックテスト
def is_prime(num: int) -> bool:
"""
素数かどうか判定する
"""
if num < 2:
return False
i = 2
while i * i < num:
if num % i == 0:
return False
i = i + 1
return True
def is_prime(num: int) -> bool:
"""
素数かどうか判定する
"""
if is_less_than_2(num):
# 2未満なら素数じゃない
return False
if is_divisible(num):
# 割り切れたら素数じゃない
return False
return True
別関数に切り出してみた
14. python3 -m unittest discover test
....E
======================================================================
ERROR: test_print_datetime (test_some_function.TestSomeFunction)
Traceback (most recent call last):
File "********************/test/test_some_function.py", line 33, in test_print_datetime
with patch('datetime.datetime.now', return_value='2022-01-01 00:00:00.100001'):
…
TypeError: can't set attributes of built-in/extension type 'datetime.datetime'
Ran 5 tests in 0.005s
FAILED (errors=1)
def test_print_datetime(self):
with patch('datetime.datetime.now', return_value='2022-01-01 00:00:00.100001'):
some_function.print_datetime()