断言异常情况

你可以通过两种不同的方法测试函数是否通过内置 unittest 引发异常。

使用上下文管理器

def division_function(dividend, divisor):
    return dividend / divisor

class MyTestCase(unittest.TestCase):
    def test_using_context_manager(self):
        with self.assertRaises(ZeroDivisionError):
            x = division_function(1, 0)

这将在上下文管理器中运行代码,如果成功,它将无法通过测试,因为没有引发异常。如果代码引发了正确类型的异常,则测试将继续。

如果要对其执行其他断言,也可以获取引发异常的内容。

class MyTestCase(unittest.TestCase):
    def test_using_context_manager(self):
        with self.assertRaises(ZeroDivisionError) as ex:
            x = division_function(1, 0)

        self.assertEqual(ex.message, 'integer division or modulo by zero')

通过提供可调用的功能

def division_function(dividend, divisor):
    """
    Dividing two numbers.

    :type dividend: int
    :type divisor: int

    :raises: ZeroDivisionError if divisor is zero (0).
    :rtype: int
    """
    return dividend / divisor

class MyTestCase(unittest.TestCase):
    def test_passing_function(self):
        self.assertRaises(ZeroDivisionError, division_function, 1, 0)

检查的异常必须是第一个参数,并且必须将可调用函数作为第二个参数传递。指定的任何其他参数将直接传递给正在调用的函数,允许你指定触发异常的参数。