While the accepted answer is correct, I think there is a better use to assert_raises
method.
If you simply want to assert that an exception occurs, it's probably simpler and cleaner to use @raises
syntax.
@raises(HTTPError)
def test_exception_is_raised:
call_your_method(p1, p2)
However, assume you want to do bit more with the raised exception, for example: we need to assert that raised HTTPError is of type 401: Unauthorized, instead of 500: Server Error.
In such a situation above syntax is not that helpful, we should use the assert_raises
but in a different way.
If we do not pass it a callable
as the second parameter assert_raises
will return back a context which we can use to further test the exception details.
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!')
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…