在Python中找出触发异常的方法

时间:2012-03-30 13:13:44

标签: python exception-handling

我正在尝试为代码编写单元测试,其中有一个方法,只要引发异常就会调用该方法。现在,此方法由多个异常调用。我的主要目的是写下一个单元测试,我能够断言所述异常是否是该方法的触发器。

例如:(通用方法划分)

try:
    divide(2,0)
except ZeroDivisionError:
    method_to_be_called()

现在在我的测试用例中,我想测试method_to_be_called()的触发异常是否为ZeroDivisionError 关于如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:1)

也许sys.exc_info()会有所帮助?

答案 1 :(得分:0)

似乎您(或应该)尝试检查是否会在发生其中一个异常时调用 方法。在这种情况下,您的方法是错误的:您的单元测试不应该询问发生了哪个异常。它应该引发您感兴趣的每个异常,并检查该方法是否被调用。 (所以,不要使用assertRaises:这不会引发异常,它希望它的参数可以这样做。)

如何检查?不要试图查看方法。如果您的方法的目的是在发生异常时执行类似写入日志的操作,请引发异常,然后检查日志条目是否正确生成。

如果在测试中很难检测到方法的操作(“副作用”),则应该用“模拟”方法替换它:这是一种取代真实物体的方法,但它的工作是帮助测试框架确保它被正确调用。在您的测试框架中查找它。