Почему исключение не поймано << try >>? - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть единичный тест FAIL (Django) FAIL из исключения, но код ошибки находится в блоке try / исключением, написанном для этого исключения. Подобный блок обрабатывает исключение, когда оно непосредственно вызывается.

Это проходит:

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#   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 / исключением обрабатывает одно исключение, а не другое?

Обратите внимание, что тестовый код скопирован из тестового кода библиотеки, который работает должным образом. (Я использую тестовый код библиотеки для диагностики моих собственных ошибок реализации.)

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Вы определили свой ImmediateHttpResponse? (Я так, не делайте этого.) Можно получить описываемый вами симптом, если вкусный пирог поднимает tastypie.exceptions.ImmediateHttpResponse пока ваш юнит тест тестирует локально определенный ImmediateHttpResponse.

Если это так, чтобы устранить проблему, удалите определение ImmediateHttpResponse и введите что-то вроде

from tastypie.exceptions import ImmediateHttpResponse

в вашем модульном тесте.

0 голосов
/ 30 сентября 2011

Понял, проблема была в том, что мой импорт ImmediateHttpException отличался от импорта кода, вызывающего ошибку.

Мое заявление на импорт было:

from convoluted.directory.structure.tastypie.exceptions import ImmediateHttpResponse

Код resource.py, выдавший использованную ошибку:

from tastypie.exceptions import ImmediateHttpResponse

Так что это вызвало исключение! = Для того, что я импортировал, хотя их строковые выходные данные были одинаковыми.

Исправление моего оператора импорта решило проблему.

Спасибо за внимание!

...