測試異常
例如,在給出錯誤輸入時,程式會丟擲錯誤。因此,需要確保在給出實際錯誤輸入時丟擲錯誤。因此,我們需要檢查確切的異常,對於此示例,我們將使用以下異常:
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
有兩種使用方式:
- 使用常規函式呼叫。第一個引數採用異常型別,第二個引數採用可呼叫函式(通常是函式),其餘引數傳遞給此可調引數。
- 使用
with
子句,只為函式提供異常型別。這具有可以執行更多程式碼的優點,但是應該小心使用,因為多個功能可以使用可能有問題的相同異常。一個例子:withself.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
方法測試失敗。