如何使用鼻子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。 第二个是要调用的函数。 其余的参数将被传递给函数(在这种情况下,它们将在函数中变成xy )。

如果预期的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!')