背景
テストコードを書いてください
このときにどんなテストコードを書けばいいでしょうか?
具体例をベースにテストケースの考え方について、本記事では考えます。
テストの種類
テストには、
等があります。
ここでは、最も簡単な単体テストについて、取り上げます。
具体例
以下のような関数があります。
このテストケースは何が考えられるでしょうか?
def double_and_get_index(value: int) -> str: if not type(value) is int: raise Exception("Please Int Value") value *= 10 if value >= 1000: return "A" elif value >= 100: return "B" elif value >= 10: return "C"
私なら以下のテストコードを書きます。
import pytest def test_double_and_get_index(): # 正常系 assert double_and_get_index(2) == "C" assert double_and_get_index(20) == "B" assert double_and_get_index(200) == "A" # 異常系 assert double_and_get_index(-10) is None with pytest.raises(Exception) as e: double_and_get_index("A") assert str(e.value) == "Please Int Value" with pytest.raises(Exception) as e: double_and_get_index(0.1) assert str(e.value) == "Please Int Value" with pytest.raises(Exception) as e: double_and_get_index(None) assert str(e.value) == "Please Int Value" # 境界値テスト assert double_and_get_index(9) == "C" assert double_and_get_index(10) == "B" assert double_and_get_index(11) == "B" assert double_and_get_index(99) == "B" assert double_and_get_index(100) == "A" assert double_and_get_index(101) == "A"
単体テストのテストケースとしては、以下のことをよく考えます。
1. 正常系
意図通りの入力値が入ってきた場合、意図通りの結果がでるか?
2. 異常系
想定外の入力値が入ってきた場合、Validationができているか?
3.境界値条件系
条件分岐の前後で適切に変更できているか?
4. 条件分岐の網羅性
条件分岐のすべてで動作検証しているか?
私が、レビュワーだったら最低限このぐらいは書こうねと伝えます。
参考になれば。