如何使用PyUnit在Python中声明引发的自定义异常?

How to assert a raised custom exception in Python with PyUnit?

我想知道如何在Python中断言引发的异常?我尝试使用断言引发(ExpectedException),但测试失败,控制台输出告诉我引发了预期的异常。那么,我如何编写这个代码,以便捕获异常并断言其正确性呢?


assertraises()可以测试从代码中引发的所有异常。

使用断言引发的语法是:

1
assertRaises(CustomException, Function that throws the exception, Parameters for function(In case of multiple params, they will be comma separated.))

它是如何工作的:

当遇到断言引发时,PyUnit使用包含customException的except块执行try except块中提到的函数。如果异常处理得当,则测试通过,否则失败。

有关assertraise的更多信息,请参阅如何正确使用单元测试的assertraise()和非类型对象?.


如果抛出异常的模块和测试代码引用不同命名空间中的异常,就会发生这种情况。

例如,如果你有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# code_to_be_tested.py

from module_with_exception import * # including CustomException

...

raise CustomException()

# test_code.py

import module_with_exception.CustomException as CE

...

with assertRaises(CE) ...

这是因为两个文件实际上指向不同的类/对象。

有两种方法可以解决这个问题:

  • 如果可能的话,以同样的方式引用它们
  • 如果您做了类似于from blah import *的事情,那么从测试模块本身抓取异常,因为它正在引发异常(即from code_to_be_tested import CustomException)。