【问题标题】:Django Testing - Hard code URLs or NotDjango 测试 - 硬代码 URL 与否
【发布时间】:2010-12-07 04:19:06
【问题描述】:

这是一个最佳实践问题。

在 Django 中编写测试时,最好在 tests.py 中硬编码 url,还是使用 dispatch 的 reverse() 函数来检索正确的 url?

仅使用硬编码的 url 进行测试 感觉 是正确的方法,但同时我想不出一个足够好的理由来不使用 reverse ()。

选项 A.reverse()

# Data has already been loaded through a fixture
def test_view_blog(self):
    url = reverse('blog', kwargs={'blog_slug':'test-blog'})
    response = self.client.get(url)
    self.failUnlessEqual(response.status_code, 200)

选项 B. 硬编码

# Data has already been loaded through a fixture
def test_view_blog(self):
    url = '/blog/test-blog/'
    response = self.client.get(url)
    self.failUnlessEqual(response.status_code, 200)

【问题讨论】:

    标签: django django-testing


    【解决方案1】:

    我建议使用“选项 A.reverse()”,因为它使您能够将测试与安装视图的位置分离。

    例如,如果 '/blog/test-blog/' 变为 '/blog/test-better-url-blog/' 进行测试仍然是相关的。

    【讨论】:

      【解决方案2】:

      我最近开始通过django-test-utils 使用Twill 对我的一些Django 工作进行单元测试。

      我使用twill.follow('Blog') 之类的东西而不是硬编码 URL 和/或使用反向代码(跟随页面上的“博客”链接)。

      这让您真正测试您网站的行为,就像网络浏览器会看到它一样,并且可以捕捉到其他方法无法捕捉到的东西。例如,如果您不小心从导航链接中删除了“博客”链接,它将失败。

      【讨论】:

      • 从概念上讲,这条路线对我来说更有意义。是的,还有 2 种技术要学习...
      【解决方案3】:

      最好使用 reverse 函数通过视图名称获取 url。这不仅会测试您的视图,还会确保您的视图名称保持不变。

      将其视为内部 API 测试。如果您的某些 URL 已损坏,您会发现并提醒您更新模板中的 {% url %} 标记。

      【讨论】:

        【解决方案4】:

        为什么不同时使用twill.follow('Blog') 和reverse()?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多