如何使用鼻子assert_raises?
我search了文档,但找不到任何。 有一对夫妇没有解释太多。
有人可以向我解释鼻子的
assert_raises(what should I put here?)
函数以及如何使用它?
assert_raises()
函数testing以确保函数调用在出现特定参数时引发指定的exception。
例如,如果你有一个add
了两个数字的函数add
,那么当你传递一个数字时,它可能会引发一个TypeError
,比如说一个整数和一个string。 所以:
from nose.tools import assert_raises def add(x, y): return x + y assert_raises(TypeError, add, 2, "0")
第一个参数是你期望的exceptiontypes。 第二个是要调用的函数。 其余的参数将被传递给函数(在这种情况下,它们将在函数中变成x
和y
)。
如果预期的exception由函数引发,则断言通过。
虽然接受的答案是正确的,我认为有更好的assert_raises
方法的用法。
如果您只是想断言发生exception,那么使用@raises
语法可能更简单,更清晰。
@raises(HTTPError) def test_exception_is_raised: call_your_method(p1, p2)
但是,假设您想要更多地引发exception,例如:我们需要声明引发的HTTPErrortypes为401:未经授权 ,而不是500:服务器错误 。
在这种情况下,语法不是很有用,我们应该以不同的方式使用assert_raises
。 如果我们不传递它作为第二个参数callable
assert_raises
将返回一个上下文,我们可以用它来进一步testingexception的细节。
def test_exception_is_raised: with assert_raises(HTTPError) as cm: call_your_method(p1, p2) ex = cm.exception # raised exception is available through exception property of context ok_(ex.code == 401, 'HTTPError should be Unauthorized!')