编写与逐行配置类似的代码的测试有什么用?

时间:2011-02-10 14:50:36

标签: ruby-on-rails unit-testing testing rspec shoulda

我一直想知道编写与代码逐一匹配的测试的有用性。

举一个例子:在Rails中,您可以使用以下命令在routes.rb中的一行中定义7条restful路由:

resources :products

BDD / TDD规定您首先测试然后编写代码。为了测试这条线的全部效果,开发人员想出了一些宏,例如:对于shoulda:http://kconrails.com/2010/01/27/route-testing-with-shoulda-in-ruby-on-rails/

class RoutingTest < ActionController::TestCase
  # simple
  should_map_resources :products
end

我不是想挑选那些编写宏的人,这只是我在Rails上看到的模式的一个例子。

我只是想知道它的用途是什么......最后你只是复制代码,你唯一测试的就是Rails的工作原理。您还可以编写一个工具,将测试宏转换为实际代码......

当我四处询问时,人们回答我:

  

“测试应该记录你的代码,所以是的,编写它们是有意义的,即使它只是一行对应一行”

你有什么想法?

6 个答案:

答案 0 :(得分:1)

对我而言,避免一些重大错误是一个很好的实践。

通过合并或编辑后的示例,此资源将被删除。怎么知道?

通过此测试,您可以立即看到,需要这些资源。如果您想要更改或删除它,您需要进行2次更改。不仅一个人可以做错误。

答案 1 :(得分:1)

作为我的老板(顺便说一下,他也是编码员)说,这些都是测试的好例子,但有时你只需要知道测试什么。在你的情况下,测试rails工作是好的,但众所周知,它已经过测试。我们不需要为此编写测试。

在我们的开发周期中,我们仅对那些非简单/复杂/已经测试过的东西使用测试。假设您有一个模型的回形针附件。我们不测试它是否已经附加,对纸夹人已经做过的测试。您测试的是您的模型是否可以访问该附件或您附加它的过程。

类似的东西:)希望有意义

答案 2 :(得分:1)

Rails已经对其路由DSL进行了测试。宏的唯一好处是它测试你是否在路由文件中实际包含了声明,该声明应该通过集成测试套件进行隐式测试。

请记住,添加测试会增加更多维护代码。每次你有一些代码要写,你应该问问自己是否值得花时间维护/编写测试。但是,当你学习测试优先时,最好是严格,因为需要时间来学习什么是值得测试和什么不是。

希望有所帮助。

答案 3 :(得分:1)

值得深入了解what the shoulda macro actually does。它检查由resources :products生成的每个路由,即它不会简单地验证路由文件中是否存在resources语句。所以这不是测试已经过测试的Rails代码的实例。

答案 4 :(得分:0)

我认为你不应该明确地测试那样的东西。

在测试中呈现页面时,form_for会抱怨路由不存在。然后我添加它。如果它是资源方式或命名路线,那在我看来并不重要。之后,当有多个命名路由时,您可以重构路由文件,以便使用资源而不是多个命名路由。

答案 5 :(得分:0)

测试不只是帮助您编写更好的代码。您需要确保代码在将来继续有效... Regression Testing。这就是这些测试所提供的。