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 モジュールを利用した例外テストの基本的な方法を見ることができます。各テストメソッドは独立しているため、異なるテストケースを追加していくことが容易です。