Python単体テスト(実際にDjango)では、私のテスト結果に自分の選択した文字列が含まれているかどうかを教えてくれる正しいassert
の文は何ですか?Python/Django:ユニットテスト結果に特定の文字列が含まれていることをどのようにアサートするのですか?
つまり、私は私のresult
が、少なくとも私はつまり、上述の第2引数として指定されたJSONオブジェクト(または文字列)、{"car" : ["toyota","honda"]}
Python単体テスト(実際にDjango)では、私のテスト結果に自分の選択した文字列が含まれているかどうかを教えてくれる正しいassert
の文は何ですか?Python/Django:ユニットテスト結果に特定の文字列が含まれていることをどのようにアサートするのですか?
つまり、私は私のresult
が、少なくとも私はつまり、上述の第2引数として指定されたJSONオブジェクト(または文字列)、{"car" : ["toyota","honda"]}
self.assertContains(result, "abcd")
を使用してそれらを比較します。
self.assertContains
をHttpResponse
オブジェクトにのみ使用してください。他のオブジェクトについては、self.assertIn
を使用してください。
は、JSONのビルドが含まれていることを確認するにself.assertContainsTheString(result, {"car" : ["toyota","honda"]})
のようなものオブジェクトはjson.dumps()
です。
その後、あなたはJSONで動作するようにそれを修正することができassertEqual(result, your_json_dict)
import json
expected_dict = {"car":["toyota", "honda"]}
expected_dict_json = json.dumps(expected_dict)
self.assertEqual(result, expected_dict_json)
['assertEqual()']の代わりに 'assertTrue()'を使う理由(http://docs.python.org/3/library/unittest.html#unittest.TestCase.assertEqual)?少なくとも 'assertEqual()'では、モジュールは結果と期待値の両方を出力します。 –
あなたは正しいです、assertEqual()が良いです。私はリンクを見つけることができませんが、私はassertEqualの代わりにassertTrueを使用するためにどこかを読んでいると確信していました。明らかに、私は間違っていた:)私は上記の例を修正します。 –
'dumps()'は任意の順序を使用しており、 'result'のキーの順序を知らないので、複数のキーを辞書に置いていると、これは信頼できないことに注意してください。あなたは 'self.assertEqual(json.loads(result)、expected_dict)'を使うほうがはるかに良いでしょう。 –
あなたはシンプルいるassertTrueで+ Pythonのキーワードに別の文字列内の文字列の予想される部分についてのアサーションを記述することができます。
self.assertTrue("expected_part_of_string" in my_longer_string)
この戦略の問題は、 "AssertionError:False is not true"という形式の貧弱なエラーメッセージを与えることです。 – jamesc
を私は同様の問題に自分自身を発見し、私は属性rendered_contentを使用し、私は
を書きましたassertTrue('string' in response.rendered_content)
と同様
assertFalse('string' in response.rendered_content)
私は、文字列が描画されていないことをテストする場合
AssertContains(response, 'html string as rendered')
しかし、それはまた、早期に提案された方法を働いていたが、だから私は最初のものはより簡単であることを言うと思います。 私はそれが助けてくれることを願っています。文字列があるか、別の部分文字列でない場合、あなたはassertIn
とassertNotIn
を使用する必要があります主張する
:
# Passes
self.assertIn('bcd', 'abcde')
# AssertionError: 'bcd' unexpectedly found in 'abcde'
self.assertNotIn('bcd', 'abcde')
また、assertInは、説明されています。 – jamesc
As mentioned by Ed I、assertIn
はおそらく最も簡単であるため、これらが新しいですある文字列を別の文字列で見つけることに答えます。しかし、質問の状態: - テストは、将来的に理解し、維持しなければならない潜在的に元々それらを書いていない誰かによって、役立つメッセージが失敗した場合に受信されるように
I want to make sure that my
result
contains at least the json object (or string) that I specified as the second argument above,i.e.,{"car" : ["toyota","honda"]}
は、したがって、私は、複数のアサーションを使用します。したがって、我々はしていると仮定しdjango.test.TestCase
内側:次のように役立つメッセージを与える
# Check that `car` is a key in `result`
self.assertIn('car', result)
# Compare the `car` to what's expected (assuming that order matters)
self.assertEqual(result['car'], ['toyota', 'honda'])
:
# If 'car' isn't in the result:
AssertionError: 'car' not found in {'context': ..., 'etc':... }
# If 'car' entry doesn't match:
AssertionError: Lists differ: ['toyota', 'honda'] != ['honda', 'volvo']
First differing element 0:
toyota
honda
- ['toyota', 'honda']
+ ['honda', 'volvo']
だろう[https://docs.djangoproject.com/en/1.11/topics/testing/tools /#django.test.Response.json] help? – coya