斷言異常情況
你可以通過兩種不同的方法測試函式是否通過內建 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)
檢查的異常必須是第一個引數,並且必須將可呼叫函式作為第二個引數傳遞。指定的任何其他引數將直接傳遞給正在呼叫的函式,允許你指定觸發異常的引數。