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 )。