Python での例外テストの概要
Python の unittest モジュールを使用すると、特定の関数が期待通りに例外をスローするかどうかを簡単にテストできます。これは、関数が特定のエラー条件下で正しくエラーを報告することを保証するために役立ちます。以下では、unittest の assertRaises メソッドを使用した例外のテスト方法について説明します。
サンプルコード 1: ZeroDivisionError のテスト
import unittest
def divide(x, y):
return x / y
class TestDivision(unittest.TestCase):
def test_divide_by_zero(self):
with self.assertRaises(ZeroDivisionError):
divide(1, 0)
if __name__ == '__main__':
unittest.main()
上記のコードでは、divide 関数が 0 で割った時に ZeroDivisionError をスローするかどうかをテストしています。これは非常に一般的な例外テストのケースです。
サンプルコード 2: ValueError のテスト
import unittest
def check_age(age):
if age < 0:
raise ValueError("Age cannot be negative")
return "Valid age"
class TestAgeCheck(unittest.TestCase):
def test_negative_age(self):
with self.assertRaises(ValueError):
check_age(-1)
if __name__ == '__main__':
unittest.main()
このテストケースは、年齢が負の数の場合に ValueError をスローすることを確認するものです。適切なエラーメッセージと共に例外をスローすることが重要です。
サンプルコード 3: カスタム例外のテスト
import unittest
class MyCustomError(Exception):
pass
def process_data(data):
if not data:
raise MyCustomError("No data provided")
class TestDataProcessing(unittest.TestCase):
def test_empty_data(self):
with self.assertRaises(MyCustomError):
process_data(None)
if __name__ == '__main__':
unittest.main()
ここでは、特定のデータが空の場合にカスタム例外 MyCustomError をスローするかどうかをテストしています。カスタム例外を使用することで、より具体的なエラーハンドリングが可能になります。
これらのサンプルを通じて、Python の unittest モジュールを利用した例外テストの基本的な方法を見ることができます。各テストメソッドは独立しているため、異なるテストケースを追加していくことが容易です。
