断言异常情况
你可以通过两种不同的方法测试函数是否通过内置 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)
检查的异常必须是第一个参数,并且必须将可调用函数作为第二个参数传递。指定的任何其他参数将直接传递给正在调用的函数,允许你指定触发异常的参数。