簡體   English   中英

Python / Django:如何斷言單元測試結果包含某個字符串?

[英]Python/Django: how to assert that unit test result contains a certain string?

在python單元測試(實際上是Django)中,什么是正確的assert語句,它會告訴我我的測試結果是否包含我選擇的字符串?

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

我想確保我的result至少包含我指定為上面第二個參數的json對象(或字符串)

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

要斷言字符串是否是另一個字符串的子字符串,您應該使用assertInassertNotIn

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

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

這些是自Python 2.7Python 3.1以來的新功能

self.assertContains(result, "abcd")

您可以修改它以使用json。

僅對HttpResponse對象使用self.assertContains 對於其他對象,請使用self.assertIn

您可以在python關鍵字中使用簡單的assertTrue +在另一個字符串中編寫關於字符串的預期部分的斷言:

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至少包含我指定為上面第二個參數的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']

我發現自己處於類似的問題,我使用了屬性rendered_content ,所以我寫道

assertTrue('string' in response.rendered_content)和類似的

assertFalse('string' in response.rendered_content)如果我想測試一個字符串沒有呈現

但它也適用於早期建議的方法,

AssertContains(response, 'html string as rendered')

所以我會說第一個更簡單。 我希望它會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM