如何使用鼻子的断言?

2024-06-18 13:11:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我找了些文件,但找不到。有一对没怎么解释。

有人能给我解释一下鼻子的

assert_raises(what should I put here?)

功能及使用方法?


Tags: 文件方法功能hereputassertwhat鼻子
2条回答

虽然接受的答案是正确的,但我认为有更好的方法来使用assert_raises

如果您只想断言发生了异常,那么使用@raises语法可能更简单、更干净。

@raises(HTTPError)
def test_exception_is_raised:
    call_your_method(p1, p2)

但是,假设您希望对引发的异常执行更多操作,例如:我们需要断言引发的HTTPError的类型是401:Unauthorized,而不是500:Server Error

在这种情况下,上面的语法没有那么大帮助,我们应该使用assert_raises,但是使用的方式不同。 如果我们不将其作为第二个参数传递callable,那么assert_raises将返回一个上下文,我们可以使用该上下文进一步测试异常详细信息。

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!')

函数assert_raises()测试以确保函数调用在出现某些参数时引发指定的异常。

例如,如果有一个函数add添加了两个数字,那么当传递它时,它可能会引发一个TypeError,比如一个整数和一个字符串。所以:

from nose.tools import assert_raises

def add(x, y):
    return x + y

assert_raises(TypeError, add, 2, "0")

第一个参数是预期的异常类型。第二个是要调用的函数。其余的参数将传递给函数(在本例中,它们将成为函数中的xy)。

如果函数引发了预期的异常,则断言将通过。

相关问题 更多 >