[英]Django unit testing - assertRaises working when it shouldn't
我正在查看API的代碼,並在單元測試中發現了這一點。 測試通過了,但我不明白為什么。
class SomeTestCase(TestCase):
def setUp(self):
self.client = Client()
@mock.patch("patch.a.thing", mock_function)
def test_fail(self):
request_data = {
"some": "bad data"
}
response = self.client.post(
"/path/to/api",
json.dumps(request_data),
content_type="application/json",
HTTP_HEADERNAME=HEADER_VALUE
)
self.assertRaises(Exception, response)
在傳遞錯誤數據時,我們期望API提供500個狀態代碼。 即使調用該API會引起異常,在client.post
外殼測試期間是否也不會引發異常? response
不是可調用的,因此將其傳遞給assertRaises
是錯誤的,但是我希望看到的行為是assertRaises
沒有得到異常,因此單元測試失敗。 誰能解釋為什么會這樣?
編輯:
我剛剛對此進行了測試,並且該單元測試也通過了:
class ThingTestCase(TestCase):
def test_thing_fails(self):
x = True
y = False
z = {"some": "thing"}
self.assertRaises(Exception, x)
self.assertRaises(Exception, y)
self.assertRaises(Exception, z)
self.assertRaises(Exception)
您應該將一個callable傳遞給assertRaises
:
self.assertRaises(Exception, self.client.post,
"/path/to/api",
json.dumps(request_data),
content_type="application/json",
HTTP_HEADERNAME=HEADER_VALUE
)
將其用作上下文管理器可能更清晰:
with self.assertRaises(Exception)
response = self.client.post(
"/path/to/api",
json.dumps(request_data),
content_type="application/json",
HTTP_HEADERNAME=HEADER_VALUE
)
此刻, self.assertRaises(Exception, response)
將嘗試調用response
,這將引發TypeError
因為它不可調用。 因為您使用Exception
調用assertRaises
,所以測試通過了。 建議使用更具體的錯誤(例如ValueError
)而不是Exception
,以避免出現此類問題。 例如,
x = True
self.assertRaises(ValueError, x)
將失敗,因為調用x
會引發TypeError
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.