Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách kiểm tra hàm Python ném ngoại lệ (exception) bằng unittest

Sử dụng unittest.TestCase.assertRaises để kiểm tra hàm có ném ngoại lệ mong đợi hay không.

Cách 1: Context Manager (khuyên dùng)

import unittest

class MyTestCase(unittest.TestCase):
    def test_add_int_and_str(self):
        with self.assertRaises(TypeError):
            1 + '1'  # Phải ném TypeError

unittest.main(exit=False)

Cách 2: Truyền callable và args

import operator

class MyTestCase(unittest.TestCase):
    def test_add_int_and_str_v2(self):
        self.assertRaises(TypeError, operator.add, 1, '1')

Đầu ra test thành công

..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK

Giải thích

  • assertRaises(ExceptionType, callable, *args, **kwargs): Gọi callable với args/kwargs, kiểm tra ném ExceptionType.
  • Context manager (with self.assertRaises(...)) dễ đọc hơn, tự động cleanup.
  • Có thể dùng assertRaisesRegex để kiểm tra cả message lỗi.

Ví dụ kiểm tra exception tùy chỉnh

def divide(a, b):
    if b == 0:
        raise ValueError("Cannot divide by zero")
    return a / b

class TestDivide(unittest.TestCase):
    def test_divide_by_zero(self):
        with self.assertRaises(ValueError) as cm:
            divide(10, 0)
        self.assertEqual(str(cm.exception), "Cannot divide by zero")