はじめに
お久しぶりです。Tomita Kentaroと申します。今回はプログラミングのテストについて書きたいと思います。特に正常系テストと異常系テストについて簡単にまとめます。今回扱う、ソースコードの全体を以下に示します。
Test.py
import unittest
def divide(a, b):
return a / b
class TestDivideFunction(unittest.TestCase):
def test_divide_normal(self):
self.assertEqual(divide(10, 2), 5)
self.assertEqual(divide(9, 3), 3)
self.assertEqual(divide(5, 1), 5)
def test_divide_by_zero(self):
with self.assertRaises(ZeroDivisionError):
divide(10, 0)
def test_divide_invalid_type(self):
with self.assertRaises(TypeError):
divide(10, "a")
if __name__ == '__main__':
unittest.main()
正常系テスト
正常系テストでは、関数が期待通りに動作することを確認します。Test.py
では、以下のコードの部分になります。test_divide_normal
関数のところです。
Test.py
def test_divide_normal(self):
self.assertEqual(divide(10, 2), 5)
self.assertEqual(divide(9, 3), 3)
self.assertEqual(divide(5, 1), 5)
異常系テスト
異常系テストでは、関数に異常な入力を与えた場合に、適切にエラーが発生することを確認します。Test.py
では、以下のコードの部分になります。test_divide_by_zero
でゼロ除算した時のテスト、test_divide_invalid_type
で無効な型を使用した時のテストを行なっております。
Test.py
def test_divide_by_zero(self):
with self.assertRaises(ZeroDivisionError):
divide(10, 0)
def test_divide_invalid_type(self):
with self.assertRaises(TypeError):
divide(10, "a")
実行結果
テストが成功した時の実行結果は以下の様になります。
$ python3 Test.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
テストが失敗した場合
まず、テストを失敗させるために、Test.py
の以下の部分を変更します。
Test.py
def divide(a, b):
return a / b + 1
実行してエラーメッセージを見ると、正常系テストが、失敗したことがわかります。
$ python3 Test.py
..F
======================================================================
FAIL: test_divide_normal (__main__.TestDivideFunction)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/TomitaKentaro/Test.py", line 8, in test_divide_normal
self.assertEqual(divide(10, 2), 5)
AssertionError: 6.0 != 5
----------------------------------------------------------------------
Ran 3 tests in 0.000s
FAILED (failures=1)
まとめ
今回は、正常系テストと異常系テストを完全に理解していなかった自分のために、この記事を作成いたしました。もし、このテストについて、間違いやアドバイスがありましたら、コメントに書いていただけると嬉しいです。