61

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

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

assert_raises(what should I put here?)

機能とその使用方法は?

4

2 に答える 2

97

受け入れられた答えは正しいですが、私は方法のより良い使用assert_raises法があると思います。

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

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

ただし、発生した例外でもう少しやりたいと仮定します。たとえば、発生したHTTPErrorのタイプが500:Server Errorではなく401:Unauthorizedであることを表明する必要があります。

上記のような状況では、構文はそれほど役に立ちませんassert_raisesが、別の方法で使用する必要があります。callable2番目のパラメーター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!')
于 2013-10-11T04:45:10.010 に答える
72

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

たとえば、2つの数値を加算する関数がある場合、整数と文字列などを渡すと、addおそらくaが発生するはずです。TypeErrorそれで:

from nose.tools import assert_raises

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

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

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

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

于 2012-08-01T21:57:59.177 に答える