Django测试 - 硬代码URL或不

T. *_*one 16 django django-testing

这是一个最佳实践问题.

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

使用硬编码的网址进行测试只是感觉像是正确的方式,但同时我想不出一个不使用reverse()的足够好的论据.

选项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)
Run Code Online (Sandbox Code Playgroud)

选项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)
Run Code Online (Sandbox Code Playgroud)

yml*_*yml 10

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

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


Ste*_*osh 6

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

而不是硬编码URL和/或使用反向我使用的东西twill.follow('Blog')(如按照页面上的"博客"链接).

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