测试异常
例如,在给出错误输入时,程序会抛出错误。因此,需要确保在给出实际错误输入时抛出错误。因此,我们需要检查确切的异常,对于此示例,我们将使用以下异常:
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
方法测试失败。