sur*_*jan 8 django django-views django-unittest python-unittest
我有一个基于类的视图
class HomePage(View):
def get(self, request):
return HttpResponse('<p>This is content.</p>')
Run Code Online (Sandbox Code Playgroud)
和url-pattern定义如下:
urlpatterns = patterns('',
url(r'^$', HomePage.as_view()),
)
Run Code Online (Sandbox Code Playgroud)
为了这个模式解析为当前的视图函数,我写了一个这样的测试:
class HomePageTest(TestCase):
def test_root_url_resolves_to_home_page_view(self):
found = resolve('/')
self.assertIsInstance(found.func, HomePage)
Run Code Online (Sandbox Code Playgroud)
通过运行此单元测试,我收到以下错误:
self.assertIsInstance(found.func, HomePage)
AssertionError: <function HomePage at 0x7f85dd2c7840> is not an instance of <class 'web.views.HomePage'>
Run Code Online (Sandbox Code Playgroud)
任何想法如何测试这种情况?
小智 15
Django View.as_view()
创建了一个具有view_class
指向基于类的视图的属性的函数.所以使用:
self.assertEquals(found.func.view_class, HomePage)
Run Code Online (Sandbox Code Playgroud)
避免在具有相同名称的不同模块中出现两个基于类的视图的问题.
Resolve 将返回调用时返回的函数HomePage.as_view()
,而不是该类型的对象。但是,通过快速测试,您可能可以通过一种方法来编写此测试:
self.assertEquals(found.func.func_name, HomePage.__name__)
Run Code Online (Sandbox Code Playgroud)
请注意,这里我们指定了HomePage.__name__
not ,'HomePage'
因为如果使用重构工具更改了类的名称,则会拾取该值。
这样做的缺点是,如果您连接了具有相同名称但来自不同模块的视图类,则此单元测试不会失败。当然,对于通用视图类名称(例如),这会带来更大的风险,HomePage
但对于其他视图类,风险应该较小。
归档时间: |
|
查看次数: |
1274 次 |
最近记录: |