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

时间:2014-09-01 07:54:45

标签: python assert python-unittest

我想知道如何在Python中声明一个引发异常?我尝试使用assertRaises(ExpectedException),但测试失败,控制台输出告诉我预期的Exception被引发。
那么我怎么能写这个,以便捕获并断言异常呢?

2 个答案:

答案 0 :(得分:1)

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

使用assertRaises的语法是:

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

工作原理:

当遇到assertRaises时,pyUnit执行Try-Except块中提到的函数,其中except块包含CustomException。如果正确处理了异常,则测试通过,否则失败。

有关assertRaises的更多信息,请访问How to properly use unit-testing's assertRaises() with NoneType objects?

答案 1 :(得分:0)

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

所以,例如,如果你有:

# 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