例如,我定义了一个类似
的函数def f(n): return 1+'1'
在unittest中,我定义了test_error:
assertRaises(TypeError,f(1))
但它只是表明这是一个错误。但是当我定义f没有像
这样的参数时def f(): return 1+'1'
并在unittest中
assertRaises(TypeError,f)
它运作得很好。这是为什么?我怎样才能用参数处理函数?
答案 0 :(得分:1)
在将其交给assertRaises()
方法之前,您调用了第一个函数。您可以为该方法提供其他参数,然后将其传递给test-under-test:
self.assertRaises(TypeError, f, 1)
更好选项是使用self.assertRaises()
作为上下文管理器:
with self.assertRaises(TypeError):
f(1)
在这种情况下,您可以正常调用该方法,这样可以更加自然。
请参阅TestCase.assertRaises()
documentation:
使用任何也传递给
assertRaises()
的位置或关键字参数调用 callable 时,测试是否引发异常。
和
如果只给出异常和可能的 msg 参数,则返回一个上下文管理器,以便测试中的代码可以内联而不是函数写入: / p>
with self.assertRaises(SomeException): do_something()
答案 1 :(得分:0)
这是因为您应该将函数参数与其参数一起传递:
self.assertRaises(TypeError, f, 1)
仅供参考,根据documentation,这是assertRaises()
合同:
assertRaises(exception, callable, *args, **kwds)
其中callable
是您的f
函数,*args
和**kwds
是您传入的位置和关键字参数。