93

Python単体テスト(実際にはDjango)でassert、テスト結果に選択した文字列が含まれているかどうかを教えてくれる正しいステートメントは何ですか?

self.assertContainsTheString(result, {"car" : ["toyota","honda"]})

result上記の 2 番目の引数として指定した少なくとも json オブジェクト (または文字列) がmy に含まれていることを確認したい

{"car" : ["toyota","honda"]}
4

5 に答える 5

144

文字列が別の部分文字列であるかどうかをアサートするには、 and を使用する必要がassertInありassertNotInます。

# Passes
self.assertIn('bcd', 'abcde')

# AssertionError: 'bcd' unexpectedly found in 'abcde'
self.assertNotIn('bcd', 'abcde')

これらはPython 2.7およびPython 3.1以降の新機能です。

于 2016-03-15T20:07:14.033 に答える
76
self.assertContains(result, "abcd")

json で動作するように変更できます。

オブジェクトself.assertContainsにのみ使用してください。HttpResponseその他のオブジェクトについては、 を使用しますself.assertIn

于 2013-07-09T05:33:51.863 に答える
26

単純な assertTrue + in python キーワードを使用して、別の文字列の文字列の予期される部分に関するアサーションを記述できます。

self.assertTrue("expected_part_of_string" in my_longer_string)
于 2015-03-23T08:05:51.770 に答える
10

を使用して JSON オブジェクトを作成しjson.dumps()ます。

次に、それらを使用して比較します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)
于 2013-07-08T22:20:45.547 に答える
10

Ed I が述べたようにassertInおそらく、ある文字列を別の文字列で見つけるための最も簡単な答えです。ただし、質問には次のように記載されています。

result上記の 2 番目の引数として指定した json オブジェクト (または文字列) が少なくともmy に含まれていることを確認したいと思います。つまり、{"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']
于 2016-03-25T13:14:15.587 に答える