测试异常

例如,在给出错误输入时,程序会抛出错误。因此,需要确保在给出实际错误输入时抛出错误。因此,我们需要检查确切的异常,对于此示例,我们将使用以下异常:

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 方法测试失败。