在python 3.4.1中,如何在unittest中声明错误?

时间:2015-01-02 02:26:52

标签: python unit-testing

例如,我定义了一个类似

的函数
def f(n): return 1+'1'

在unittest中,我定义了test_error:

assertRaises(TypeError,f(1))

但它只是表明这是一个错误。但是当我定义f没有像

这样的参数时
def f(): return 1+'1'

并在unittest中

assertRaises(TypeError,f)

它运作得很好。这是为什么?我怎样才能用参数处理函数?

2 个答案:

答案 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是您传入的位置和关键字参数。