【问题标题】:How can I automatically generate test cases for Ruby on Rails?如何为 Ruby on Rails 自动生成测试用例?
【发布时间】:2023-03-30 07:45:01
【问题描述】:

有没有办法自动生成简单的测试用例?我发现自己花时间编写非常简单的测试,以确保所有控制器和模型都能正常工作。下面是一个使用 rspec 编写的控制器测试用例示例:

machine = FactoryGirl.create(:machine, type: 1)
mac = FactoryGirl.create(:mac, machine_id: m1.id)
win = FactoryGirl.create(:win, machine_id: m4.id)
sign_in user
get :index
get :show, id: machine.id
get :report

我今天找不到任何可以根据新编写的代码自动生成此类测试的工具。如果真的什么都不存在,我可能会考虑为这个问题建立一个解决方案。

【问题讨论】:

  • 你可以写一个生成器guides.rubyonrails.org/generators.html
  • Rails 使最基本的代码(点击页面、点击表单、提交值等)比编写匹配测试容易得多。坚持下去,即使它很无聊,这样当你需要添加严肃的逻辑时,测试框架就会为你提供帮助。那么测试将比代码更容易!

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


【解决方案1】:

要涵盖基本功能,您可以编写特定的generator

您还可以重新定义标准脚手架模板(例如,通过将您自己的模板添加到 lib/templates/rspec/model/model_spec.rb - 这将重新定义模型脚手架)。

但真正的问题是为什么要这样做。在 TDD 之后,您应该编写测试然后创建代码,反之亦然。

【讨论】:

  • 我不是 TDD 的忠实粉丝,我喜欢先编码然后测试。感谢您的回复。
【解决方案2】:

如果测试的可预测性足以生成它,则不值得编写。在您的示例中,您没有断言任何内容。这是一个非常弱的测试,仅适用于提高代码覆盖率。如果它断言页面上应该有什么,它会更强大。你不能生成那个。您也无法生成以有意义的方式遍历多个页面的场景。 (我认为您的示例希望成为 rspec 功能规范或 Cucumber 场景。)

编写一个生成器来创建一个骨架是有意义的,开发人员可以用无法生成的有意义的部分来填充它。

【讨论】:

  • 对于某些应用程序,只要有 200 响应就足以确信一切都很好。这些测试实际上非常有用,我不必花太多时间编写它们,每次我进行大量更改时,我都会运行 rspec 以确保我没有破坏任何东西然后部署。因此,由于它们具有低复杂性和重复性,因此需要自动生成它们。
  • 我也为现有的应用程序做过,当时我还没有时间编写完整的测试。 (很难想象没有页面内容的应用程序会从断言中受益。)但根据我的经验,仅响应状态测试只有在每个测试用例都是单个 GET 时才有意义,然后您可以编写单个读取 GET 的 URL 列表(或控制器-动作对以获取 rspec,或其他)的代码,您不需要生成这样的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多