У меня есть модульный тест Python (Django) FAIL из-за исключения, но ошибочный код находится в блоке try/except, написанном для этого исключения. Аналогичный блок обрабатывает исключение, когда оно вызывается напрямую.
Это проходит:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Code catches a directly raised ImmediateHttpResponse
try:
raise ImmediateHttpResponse(response=auth_result)
self.fail()
except ImmediateHttpResponse, e:
self.assertTrue(True)
Это, сразу после него, терпит неудачу:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# FAIL
try:
resp = resource.dispatch_list(request) #<--- Line 172
self.fail()
except ImmediateHttpResponse, e:
self.assertTrue(True)
Вот след:
Traceback (most recent call last):
File ".../web_app/tests/api/tastypie_authentication.py", line 172, in test_dispatch_list_diagnostic
resource.dispatch_list(request)
File ".../libraries/django_tastypie/tastypie/resources.py", line 410, in dispatch_list
return self.dispatch('list', request, **kwargs)
File ".../libraries/django_tastypie/tastypie/resources.py", line 434, in dispatch
self.is_authenticated(request)
File ".../libraries/django_tastypie/tastypie/resources.py", line 534, in is_authenticated
raise ImmediateHttpResponse(response=auth_result)
ImmediateHttpResponse
Судя по трассировке, вызов dispatch_list() завершается ошибкой, так как вызывает исключение ‹‹ ImmediateHttpResponse >>. Но размещение именно такого исключения в блоке try не приводит к подобному сбою.
Почему блок try/except обрабатывает одно исключение, а не другое?
Обратите внимание, что тестовый код скопирован из тестового кода библиотеки, который работает должным образом. (Я использую тестовый код библиотеки для диагностики собственных ошибок реализации.)