LoginSignup
0
0

【備忘録】正常系テストと異常系テストの例

Posted at

はじめに

お久しぶりです。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)

まとめ

今回は、正常系テストと異常系テストを完全に理解していなかった自分のために、この記事を作成いたしました。もし、このテストについて、間違いやアドバイスがありましたら、コメントに書いていただけると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0