我想在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()
当我运行这段代码时,它仍会引发异常。我希望测试通过,说已经引发了异常。
答案 0 :(得分:1)
在将Add
函数传递给assertRaises
时,不应该直接执行它,而是在之后传递位置参数。
assertRaises(Exception, Add, None, None)
这允许assertRaises
的内部实现控制执行您的函数并检查正确的异常。如果你直接调用该函数,例如assertRaises(Exception, Add(None, None))
,那么assertRaises
必须在自己的函数体可以执行之前完全评估Add(None, None)
,因为它必须消耗该函数调用的结果作为其输入的参数。这是对Add
的不受保护的调用,其参数将触发异常,因此在Exception
的实际函数体被使用之前会引发assertRaises
。