Python 3 で関数が例外をスローするかどうかをテストする方法は?

PYTHON3 チュートリアル

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

購読
通知
0 Comments
Inline Feedbacks
View all comments