如何使用鼻子的assert_raises?(How to use nose's assert

2019-06-26 16:38发布

我搜索过的文件,但找不到任何。 有一个是没有太多解释情侣。

谁能给我解释一下鼻子的

assert_raises(what should I put here?)

功能以及如何使用它?

Answer 1:

assert_raises()函数的测试,以当某些参数呈现一定的函数调用引发指定异常。

举例来说,如果你有一个功能add ,增加了两个数字,它或许应该提出一个TypeError时,你通过它,说,一个整数和一个字符串。 所以:

from nose.tools import assert_raises

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

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

第一个参数是你期望的异常类型。 二是要调用的函数。 的参数的其余部分将被传递给函数(在这种情况下,他们将成为xy在函数内部)。

如果预期的异常是由函数提出,断言通过。



Answer 2:

虽然接受的答案是正确的,我认为这是一个更好的利用到assert_raises方法。

如果你只是想断言,发生异常时,它可能更简单和更清洁的使用@raises语法。

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

但是,假设你要与引发的异常位做多,例如:我们需要断言提出HTTPError是401:未经授权 ,而不是500:服务器错误

在上面的语法这样的情况是不是有帮助的,我们应该用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!')


文章来源: How to use nose's assert_raises?