18

这是一个最佳实践问题。

在 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)
4

4 回答 4

10

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

例如,如果 '/blog/test-blog/' 变成 '/blog/test-better-url-blog/' for test 仍然是相关的。

于 2009-10-18T19:49:53.810 回答
6

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

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

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

于 2009-10-15T21:07:21.243 回答
1

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

See it as internal API testing. You would recognize if some of your URLs are broken and get reminded to update your {% url %} tags in the templates.

于 2009-11-06T22:26:41.160 回答
0

Why not do both twill.follow('Blog') & reverse()?

于 2010-02-11T16:20:18.827 回答