Я был кодом, просматривающим 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)
Мы ожидаем код статуса 500 из API, поскольку мы передаем плохие данные. Даже если вызов API должен был вызвать исключение, не было бы ли это повышаться в течение client.post
обкатки модульного теста на ошибку? response
не является вызываемым, и поэтому неправильно передавать его на assertRaises
, однако поведение, которое я ожидаю увидеть, заключается в том, что assertRaises
не получает исключения, и поэтому модульный тест терпит неудачу. Может ли кто-нибудь объяснить, почему он ведет себя таким образом?
Edit:
Я просто проверил это, и это испытательная установка проходит так:
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 (...)' * перед * вашим утверждением, похоже, что это не повышает ожидаемое исключение. Это говорит о том, что ваш monkeypatching не работает. – Alasdair