19:テストにテスト対象と同等の実装を書かない¶
テストを書けと言われるが、どう書けば良いかピンとこない という方は多いのではないでしょうか。 次のような例はとてもありがちな失敗です。
具体的な失敗¶
以下のMD5を計算する関数 calc_md5
の単体テストを考えましょう。
import hashlib
def calc_md5(content):
content = content.strip()
m = hashlib.md5()
m.update(content.encode('utf-8'))
return m.hexdigest()
この実装の単体テスト内で、実装内でも使われている hashlib.md5
を使ってはいけません。
import hashlib
from main import calc_md5
def test_calc_md5():
actual = calc_md5(" This is Content ")
m = hashlib.md5()
m.update(b"This is Content")
assert actual == m.hexdigest()
よく見ると、テストの中に calc_md5
の実装と全く同じ処理が含まれています。
これではテストが成功することは間違いないので、テストの意味がありません。
実装で根本的に処理が間違っていても、テストが同じ結果になるので間違いには気づけません。