在 python 3.4.1 中,如何在 unittest 中断言这样的错误?
In python 3.4.1, how can I assert an error in unittest like this?
比如我定义了一个像
这样的函数
def f(n): return 1+'1'
在单元测试中,我定义了 test_error:
assertRaises(TypeError,f(1))
但它只是表明这是一个错误。但是当我定义 f 时没有像
这样的参数
def f(): return 1+'1'
并在单元测试中
assertRaises(TypeError,f)
它工作得很好。这是为什么?如何处理带参数的函数?
这是因为您应该将函数参数与其参数一起传递:
self.assertRaises(TypeError, f, 1)
仅供参考,根据 documentation,这是 assertRaises()
合同:
assertRaises(exception, callable, *args, **kwds)
其中 callable
是您的 f
函数,*args
和 **kwds
是您传递的位置和关键字参数。
您在 将其交给 assertRaises()
方法之前调用了第一个函数 。你可以给方法额外的参数,然后它会传递给被测函数:
self.assertRaises(TypeError, f, 1)
更好的选项是使用self.assertRaises()
作为上下文管理器:
with self.assertRaises(TypeError):
f(1)
你在那种情况下调用方法'normally',这样读起来更自然。
参见 TestCase.assertRaises()
documentation:
Test that an exception is raised when callable is called with any positional or keyword arguments that are also passed to assertRaises()
.
和
If only the exception and possibly the msg arguments are given, return a context manager so that the code under test can be written inline rather than as a function:
with self.assertRaises(SomeException):
do_something()
比如我定义了一个像
这样的函数def f(n): return 1+'1'
在单元测试中,我定义了 test_error:
assertRaises(TypeError,f(1))
但它只是表明这是一个错误。但是当我定义 f 时没有像
这样的参数def f(): return 1+'1'
并在单元测试中
assertRaises(TypeError,f)
它工作得很好。这是为什么?如何处理带参数的函数?
这是因为您应该将函数参数与其参数一起传递:
self.assertRaises(TypeError, f, 1)
仅供参考,根据 documentation,这是 assertRaises()
合同:
assertRaises(exception, callable, *args, **kwds)
其中 callable
是您的 f
函数,*args
和 **kwds
是您传递的位置和关键字参数。
您在 将其交给 assertRaises()
方法之前调用了第一个函数 。你可以给方法额外的参数,然后它会传递给被测函数:
self.assertRaises(TypeError, f, 1)
更好的选项是使用self.assertRaises()
作为上下文管理器:
with self.assertRaises(TypeError):
f(1)
你在那种情况下调用方法'normally',这样读起来更自然。
参见 TestCase.assertRaises()
documentation:
Test that an exception is raised when callable is called with any positional or keyword arguments that are also passed to
assertRaises()
.
和
If only the exception and possibly the msg arguments are given, return a context manager so that the code under test can be written inline rather than as a function:
with self.assertRaises(SomeException): do_something()