私はAPIをレビューするコードであり、これをユニットテストで見つけました。テストは合格しますが、理由を理解できません。Djangoユニットのテスト - assertRaisesは動作しないときに動作する
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)
アサーションの前に 'response = self.client.post(...)' *を呼び出すので、期待される例外が発生していないかのように見えます。これは、あなたのモンキータイピングが機能していないことを示唆しています。 – Alasdair