素数列挙機能の仕様
- ある数字1 < n < 1000が与えられる
- n未満の素数を列挙する
上記仕様を持つ機能をTDDで実装してみましょう。
テストの実装
では、TDDの原則に則りまずはどのようなケースをテストすべきか考えてみます。例えば、10未満の素数は、2, 3, 5, 7の4つです。従って、10が入力された場合には、この4つの数字が列挙される必要があります。そこで、次のテストコードを書きます:
test_prime_enumeration.py
def test_prime_enumeration():
assert enumerate_prime_number_under(10) == [2, 3, 5, 7]
ここで、pytest test_prime_enumeration.py
を実行すると、テストが失敗します:
assert enumerate_prime_numer_under(n) == [2, 3, 5, 7]
E NameError: name 'enumerate_prime_numer_under' is not defined
test_prime_enumeration.py:4: NameError
========================================== short test summary info ==========================================
FAILED test_prime_enumeration.py::test_prime_enumeration - NameError: name 'enumerate_prime_numer_under' i...
============================================= 1 failed in 0.06s =============================================
enumerate_prime_number_under
関数が未実装であることが失敗の原因となっています。次に、この失敗を解消するために、この関数を実装しましょう:
prime_enumerator.py
def enumerate_prime_number_under(n):
pass
test_prime_enumeration.py
from tdd_prime.prime_enumerator import enumerate_prime_number_under
def test_prime_enumeration():
assert enumerate_prime_number_under(10) == [2, 3, 5, 7]
再度テストを実行すると、
E assert None == [2, 3, 5, 7]
E + where None = enumerate_prime_number_under(10)
test_prime_enumeration.py:4: AssertionError
========================================== short test summary info ==========================================
FAILED test_prime_enumeration.py::test_prime_enumeration - assert None == [2, 3, 5, 7]
============================================= 1 failed in 0.06s =============================================
と表示され、エラーは無くなったが、テストは依然失敗していることがわかります。ここで実装した関数は単にpass
を実行するだけの何もしない関数なので当然そうなります。
まとめと次回以降について
- 今回は、素数列挙のテストケースを作成した
- 次回以降は、いよいよこのテストケースに通るような実装を行う