例外をスローする関数のテスト
Python
では、関数が正しく例外をスローするかをテストすることは非常に重要です。特に、エラー処理が期待通りに機能するかどうかを確認する際に、unittest
モジュールのassertRaises
メソッドが便利です。ここでは、assertRaises
を使った基本的な方法と、例外メッセージの確認方法を詳しく解説します。
assertRaises
の基本使用法
Python
のunittest
モジュールには、assertRaises
というメソッドが用意されています。このメソッドを使うと、特定の関数が例外をスローするかどうかを簡単に確認できます。例として、TypeError
をスローする関数をテストするコードは次のようになります。
import unittest
def add_strings(a, b):
return a + b
class TestAddition(unittest.TestCase):
def test_raises_type_error(self):
with self.assertRaises(TypeError):
add_strings(1, 'one')
このテストでは、1 + 'one'
を実行した際にTypeError
が発生することを確認しています。もしTypeError
が発生しない場合、このテストは失敗となります。
コンテキストマネージャを使った詳細な例外チェック
assertRaises
をコンテキストマネージャとして使用すると、例外オブジェクトをキャプチャして、そのメッセージや属性を詳しくチェックできます。以下の例では、スローされた例外のメッセージ内容をテストしています。
def broken_function():
raise ValueError("これはエラーです")
class TestBrokenFunction(unittest.TestCase):
def test_exception_message(self):
with self.assertRaises(ValueError) as context:
broken_function()
self.assertTrue("これはエラーです" in str(context.exception))
pytestを使用したテスト
pytest
を使用している場合、pytest.raises
を使うことで、同様の例外テストが可能です。次の例は、ZeroDivisionError
をテストする方法です。
import pytest
def divide_by_zero():
return 1 / 0
def test_zero_division():
with pytest.raises(ZeroDivisionError):
divide_by_zero()
まとめ
Python
で関数が期待通りに例外をスローするかをテストする際には、assertRaises
やpytest
のraises
を活用することができます。特に、例外メッセージの確認や、複数の例外に対応する場合など、柔軟に対応できるこれらの手法は、バグを防ぐために非常に有効です。