python unittest处理异常处理

时间:2017-12-08 16:45:52

标签: python

我想在unittest中对异常处理进行单元测试,并且我使用assertRaises来检查是否抛出了异常。

class Add():
    def __init__(self, x, y):
        if type(x) != int or type(y) != int:
            raise Exception('Not a valid number')


Add(None, None)            

import unittest
from test2 import Add
class TestAdd(unittest.TestCase):
    def test_check_for_valid_nos(self):
        self.assertRaises(Exception, Add(None,None))

if __name__ == '__main__':
    unittest.main()

当我运行这段代码时,它仍会引发异常。我希望测试通过,说已经引发了异常。

1 个答案:

答案 0 :(得分:1)

在将Add函数传递给assertRaises时,不应该直接执行它,而是在之后传递位置参数。

assertRaises(Exception, Add, None, None)

这允许assertRaises的内部实现控制执行您的函数并检查正确的异常。如果你直接调用该函数,例如assertRaises(Exception, Add(None, None)),那么assertRaises必须在自己的函数体可以执行之前完全评估Add(None, None) ,因为它必须消耗该函数调用的结果作为其输入的参数。这是对Add的不受保护的调用,其参数将触发异常,因此在Exception的实际函数体被使用之前会引发assertRaises