web-dev-qa-db-ja.com

鼻のassert_raisesを使用するには?

ドキュメントを検索しましたが、見つかりませんでした。あまり説明しなかったカップルがいました。

誰かが私に鼻を説明できますか

assert_raises(what should I put here?)

機能と使用方法

53
user1544624

assert_raises()関数は、特定のパラメーターが指定されたときに、関数呼び出しが指定された例外を発生させることを確認するためにテストします。

たとえば、2つの数値を追加する関数addがある場合、おそらく整数と文字列を渡すときにTypeErrorを発生させる必要があります。そう:

from nose.tools import assert_raises

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

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

最初の引数は、予想される例外タイプです。 2番目は呼び出す関数です。残りの引数は関数に渡されます(この場合、それらは関数内でxおよびyになります)。

関数によって予期される例外が発生した場合、アサーションは成功します。

65
kindall

受け入れられた答えは正しいものの、assert_raisesメソッドを使用する方が良いと思います。

単に例外が発生したことを表明したい場合は、おそらく@raises構文を使用する方が簡単で簡潔です。

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

ただし、発生した例外を使用してもう少しやりたい場合は、たとえば、発生したHTTPErrorのタイプが500:Server Errorではなく401:Unauthorizedであることをアサートする必要があります=。

このような状況では、上記の構文はあまり役に立ちません。assert_raisesを使用する必要がありますが、別の方法で使用する必要があります。 2番目のパラメーターとして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!')
90
BuddhiP