python単体テスト(実際にはDjango)では、テスト結果に選択した文字列が含まれているかどうかを示す正しいassert
ステートメントは何ですか?]
self.assertContainsTheString(result, {"car" : ["toyota","honda"]})
私のresult
に少なくとも上記の2番目の引数として指定したjsonオブジェクト(または文字列)が含まれていることを確認したい
{"car" : ["toyota","honda"]}
self.assertContains(result, "abcd")
Jsonで動作するように変更できます。
self.assertContains
はHttpResponse
オブジェクトにのみ使用してください。他のオブジェクトの場合は、self.assertIn
を使用します。
文字列が別の部分文字列であるかどうかをアサートするには、assertIn
およびassertNotIn
を使用する必要があります。
# Passes
self.assertIn('bcd', 'abcde')
# AssertionError: 'bcd' unexpectedly found in 'abcde'
self.assertNotIn('bcd', 'abcde')
これらは Python 2.7 および Python 3.1 以降の新機能です
単純なassertTrue + in python keyword:
self.assertTrue("expected_part_of_string" in my_longer_string)
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)
Ed Iが述べたように 、assertIn
はおそらく、ある文字列を別の文字列から見つける最も簡単な答えです。ただし、質問の状態は次のとおりです。
result
には、少なくとも上記の2番目の引数として指定したjsonオブジェクト(または文字列)、つまり{"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']