为什么在功能测试中硬编码URL?

时间:2014-04-08 22:29:26

标签: php symfony functional-testing

任何人都可以解释一下吗?

  

对请求URL进行硬编码是功能测试的最佳实践。如果测试   使用Symfony路由器生成URL,它不会检测到任何更改   可能影响最终用户的应用程序URL。

http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

他们指的是什么样的变化?如果使用路由器生成所有URL,为什么会出现问题?

2 个答案:

答案 0 :(得分:4)

如果网址发生变化,则会影响书签,来自其他网站的链接,网页排名......如果使用生成的网址进行测试,即使您(意外)更改了网址格式,测试也会成功。

通过使用硬编码的网址,您可以防止这种情况发生。如果您不小心更改了网址,测试将失败。如果您打算更改它,您只需更新硬编码的URL以匹配新情况。这样你就可以控制了。

对于某些应用程序或特定网站或应用程序中的某些网址,如果网址发生更改,则可能无关紧要。在这种情况下,您可以生成网址。这是一般性建议,而不是法律。 :)

答案 1 :(得分:1)

如果URL未经过硬编码,则生成URL的模板代码可能如下所示:

{{ path('examplebundle_home_action') }}

然后路由器将扩展为:

http://www.example.com/action

如果您的功能测试引用了上述path调用,则假设您更改了操作的路径,以便现在显示URL:

http://www.example.com/newaction

由于您的测试涉及path调用,因此它们将继续通过,因为它们无缝地引用新网址。但是,您的用户可能不同意 - 他们可能已将旧URL加入书签,或者可能会在应用程序的其他位置引用到Symfony之外,等等。在没有完全理解影响的情况下更改URL总是很危险的,并且在功能测试中对其进行硬编码是一个很好的提醒,即重要的事情发生了变化。