【问题标题】:Why can't I test if correct generic view is resolved?为什么我不能测试是否解决了正确的通用视图?
【发布时间】:2015-02-28 10:03:49
【问题描述】:

我正在尝试进入 TDD。通过 Harry Percival 的书,我想以非常小的步骤进行。所以我的第一个单元测试应该是检查是否...

found = resolve("/")

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

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

但它告诉我:

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

那么为什么函数不匹配呢?

【问题讨论】:

    标签: python django unit-testing testing tdd


    【解决方案1】:

    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)
    

    【讨论】:

    • 谢谢。与@alecxe 的建议相比,这样做有什么优势?
    • 如果您的项目中只有一个ListView,那么@alexce 的建议是完美的。但是如果有多个ListViews,并且你想区分它们,那么我的方法会更好。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      相关资源
      最近更新 更多