斷言異常情況

你可以通過兩種不同的方法測試函式是否通過內建 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)

檢查的異常必須是第一個引數,並且必須將可呼叫函式作為第二個引數傳遞。指定的任何其他引數將直接傳遞給正在呼叫的函式,允許你指定觸發異常的引數。