Django测试 - 硬代码URL或不

时间:2009-10-15 20:08:21

标签: django django-testing

这是一个最佳实践问题。

在Django中编写测试时,在test.py中硬编码url或使用dispatch的reverse()函数检索正确的url会更好吗?

使用硬编码的网址仅以正确的方式测试 感觉 ,但与此同时,我无法想到没有使用反向的足够好的论据()。

选项A.反向()

# 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 个答案:

答案 0 :(得分:10)

我建议使用“Option A. reverse()”,因为它可以让您将测试与安装视图的位置分离。

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

答案 1 :(得分:6)

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

不使用硬编码网址和/或使用反向操作,而是使用twill.follow('Blog')之类的内容(点击页面上的“博客”链接)。

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

答案 2 :(得分:1)

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

将其视为内部API测试。您会认识到某些网址是否已损坏并被提醒您更新模板中的{%url%}标记。

答案 3 :(得分:0)

为什么不同时twill.follow('Blog')和& reverse()