为什么我不能测试是否解决了正确的通用视图?

Why can't I test if correct generic view is resolved?

我正在尝试进入 TDD。按照哈利·珀西瓦尔 (Harry Percival) 的书,我想一步一步来。所以我的第一个单元测试应该是检查是否...

found = resolve("/")

确实调用了正确的函数。所以我做了这个断言:

self.assertEqual(found.func, ListView.as_view())

但它告诉我:

AssertionError: <function ListView at 0x3389668> != <function ListView at 0x35c1e60>

为什么函数不匹配?

ListView.as_view() 在每次调用时生成新的视图函数对象。因此 urls.py 中生成的函数与您的测试中生成的函数不同。

您可以在 views.py 中创建一次视图函数并在 urls.pytests.py 中引用它:

views.py

home_view = ListView.as_view()

urls.py

url(r'^$', views.home_view, name='home'),

tests.py

self.assertEqual(found.func, views.home_view)

您可以查看 __class__ (as it is done under-the-hood for the django debug page):

self.assertEqual(found.func.__class__, ListView)