2017-06-13 10 views
1

pytest documentationには、assertが失敗したときに出力メッセージをカスタマイズできると記載されています。 REST APIのメソッドをテストするとき、私はそれが無効なステータスコードを返すassertメッセージをカスタマイズしたい:pytest可変イントロスペクションによるメッセージのカスタマイズ

def test_api_call(self, client): 
    response = client.get(reverse('api:my_api_call')) 
    assert response.status_code == 200 

だから私はconftest.py

def pytest_assertrepr_compare(op, left, right): 
    if isinstance(left, rest_framework.response.Response): 
     return left.json() 

しかし、問題は、このようなコードの断片を入れてみましたleftresponse.status_codeの実際の値なので、Responseの代わりにintです。

E 400 =エラー400がオブジェクトResponseの属性status_codeから来ていると言っ

を.status_code 400 == 201 E +を主張:ただし、デフォルトの出力メッセージのような何かをスローします。

私の指摘は、評価対象の変数のイントロスペクションがあるということです。では、上記の例と同様の出力を得るために、アサートエラーメッセージを快適な方法でカスタマイズするにはどうすればよいですか?

答えて

0

カスタム例外メッセージ表示するにはPythonの組み込みの機能を使用することができます。

assert response.status_code == 200, "My custom msg: actual status code {}".format(response.status_code) 

それとも、ヘルパーが機能主張に構築することができます。また、

def assert_status(response, status=200): # you can assert other status codes too 
    assert response.status_code == status, \ 
     "Expected {} actual status {}. Response text {}".format(status, response.status_code, response.text) 

# here is how you'd use it 
def test_api_call(self, client): 
    response = client.get(reverse('api:my_api_call')) 
    assert_status(response) 

チェックアウト:https://wiki.python.org/moin/UsingAssertionsEffectively

+0

おかげでドミトリーを。私はあなたが提案した両方の解決策を知っていて、両方がうまくいくと確信しています。しかし、私はあなたがまだ 'assert'を使用することができ、より多くのコードを書く必要がない、すばらしい解決策を探していました。 –

+0

ああ、申し訳ありませんが、あなたの質問の意思を得ていない –

関連する問題