在python單元測試(實際上是Django)中,正確的assert
語句會告訴我測試結果是否包含我選擇的字符串?Python/Django:如何聲明單元測試結果包含某個字符串?
即像self.assertContainsTheString(result, {"car" : ["toyota","honda"]})
我想確保我的result
包含至少我指定爲上面的第二個論點,即JSON對象(或字符串),{"car" : ["toyota","honda"]}
在python單元測試(實際上是Django)中,正確的assert
語句會告訴我測試結果是否包含我選擇的字符串?Python/Django:如何聲明單元測試結果包含某個字符串?
即像self.assertContainsTheString(result, {"car" : ["toyota","honda"]})
我想確保我的result
包含至少我指定爲上面的第二個論點,即JSON對象(或字符串),{"car" : ["toyota","honda"]}
self.assertContains(result, "abcd")
你可以修改它使用JSON的工作進行比較。
使用self.assertContains
只適用於HttpResponse
對象。對於其他對象,請使用self.assertIn
。
構建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)
爲什麼使用的'assertTrue()'代替['assertEqual便()'](http://docs.python.org/3/library/unittest.html#unittest.TestCase.assertEqual)?至少使用'assertEqual()',模塊將打印結果和期望值。 –
你說得對,assertEqual()更好。我無法找到鏈接,但我非常肯定已經在某處讀取使用assertTrue而不是assertEqual。很明顯,我錯了:)我會修正上面的例子。 –
注意,這將是不可靠的,當你在任何字典不止一個關鍵,因爲'轉儲()'使用任意排序,我們不知道鑰匙在'result'排序。你會好得多使用'self.assertEqual(json.loads(結果),expected_dict)'。 –
你可以寫斷言大約在另一個字符串串的預期部分用一個簡單的assertTrue +在Python關鍵詞:
self.assertTrue("expected_part_of_string" in my_longer_string)
而這種策略的問題是能給形式的差失敗消息「Asse田:假是不是真正的」 – 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')
這些都是新的,因爲Python 2.7和Python 3.1
也'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]幫助? – coya