我有异常的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()调用失败,因为它引发了&lt;&lt; ImmediateHttpResponse&gt;&gt;例外。但是在try块中放置这样的异常不会产生类似的失败。
为什么try / except块处理一个例外但不处理另一个例外?
请注意,测试代码是从库的测试代码中复制的,该代码确实按预期运行。 (我正在使用库测试代码来诊断我自己的实现失败。)
答案 0 :(得分:3)
您是否定义了自己的ImmediateHttpResponse
? (我是这样,不要这样做。)如果tastypie提出了一个症状,你可能会得到你所描述的症状。
在您的单元测试正在测试时tastypie.exceptions.ImmediateHttpResponse
本地定义的ImmediateHttpResponse
。
如果是这样,要解决问题,请删除ImmediateHttpResponse
的定义并添加类似
from tastypie.exceptions import ImmediateHttpResponse
在您的单元测试中。
答案 1 :(得分:0)
知道了,问题是我的ImmediateHttpException导入与引发错误的代码的导入不同。
我的导入声明是:
from convoluted.directory.structure.tastypie.exceptions import ImmediateHttpResponse
抛出所用错误的resource.py代码:
from tastypie.exceptions import ImmediateHttpResponse
所以它引发了一个异常!=我导入的那个,尽管它们的字符串输出是相同的。
修复我的import语句解决了这个问题。
感谢收听!