測試異常

例如,在給出錯誤輸入時,程式會丟擲錯誤。因此,需要確保在給出實際錯誤輸入時丟擲錯誤。因此,我們需要檢查確切的異常,對於此示例,我們將使用以下異常:

class WrongInputException(Exception):
    pass

在給出錯誤輸入時會引發此異常,在以下上下文中我們總是期望將數字作為文字輸入。

def convert2number(random_input):
    try:
        my_input = int(random_input)
    except ValueError:
        raise WrongInputException("Expected an integer!")
    return my_input

要檢查是否已引發異常,我們使用 assertRaises 來檢查該異常。assertRaises 有兩種使用方式:

  1. 使用常規函式呼叫。第一個引數採用異常型別,第二個引數採用可呼叫函式(通常是函式),其餘引數傳遞給此可調引數。
  2. 使用 with 子句,只為函式提供異常型別。這具有可以執行更多程式碼的優點,但是應該小心使用,因為多個功能可以使用可能有問題的相同異常。一個例子:with self.assertRaises(WrongInputException):convert2number(not a number

第一個已在以下測試用例中實現:

import unittest

class ExceptionTestCase(unittest.TestCase):

    def test_wrong_input_string(self):
        self.assertRaises(WrongInputException, convert2number, "not a number")

    def test_correct_input(self):
        try:
            result = convert2number("56")
            self.assertIsInstance(result, int)
        except WrongInputException:
            self.fail()

也可能需要檢查不應該丟擲的異常。但是,當丟擲異常時,測試將自動失敗,因此可能根本不需要。只是為了顯示選項,第二個測試方法顯示瞭如何檢查不丟擲異常的情況。基本上,這是捕獲異常,然後使用 fail 方法測試失敗。