【问题标题】:Rails 2.3.9 testing framework - rspec1, cucumber or rails built-in testing frameworkRails 2.3.9 测试框架 - rspec1, cucumber or rails 内置测试框架
【发布时间】:2011-06-23 22:32:25
【问题描述】:
我们现在有一个相当大的 rails(2.3.9) 应用程序,其中包含 0 个 rails 测试用例。 (什么???)。是的。这是可能的:)。
继续前进,如果我们想基于一个框架进行测试,我们应该选择哪一个,黄瓜、rspec1 还是内置于测试框架的 rails?。我之所以只说一个框架,是因为为同一目的学习和管理多个框架很复杂。
Q1:2009 年的一些 SO
questions 推荐使用 rspec
用于单元测试
模型/控制器和黄瓜
测试视图。是吗(截至 6 月 23 日)
2011) 仍然是有效的推荐吗?
Q2:有没有人设法构建所有
他们需要的测试用例
框架(比如Cucumber)?,如果
是的,哪个?
【问题讨论】:
标签:
ruby-on-rails
unit-testing
rspec
cucumber
【解决方案1】:
Q1:这取决于您的开发人员。基本上你可以用所有框架测试几乎相同的东西。我个人会选择 rspec1。您会发现许多 rspec 资源,尤其是 rails 2.3.x 的资源。从长远来看,我会尝试将项目迁移到 Rails 3。等待的时间越长,它就越痛苦。
Q2:不,AFAIK cucumber 用于集成测试。您可以只使用 rspec 或 testunit,但您将缺乏集成测试。如果您只进行集成测试,您将缺少单元测试,但您需要单元(或行为)测试。此外,您应该花一些时间在模拟框架上,因为它们会为您节省很多时间。
【解决方案2】:
这在某种程度上是一个偏好问题,但在这三个中我会选择 rspec 或 Test::Unit。 RSpec 最近被批评过度设计,但我真的很喜欢:
- 匹配器语法(
value.should == 1 与 assert_equal(value, 1))
- 测试名称不限于方法名称(
it "does something awesome" { ... } 与 def test_it_does_something_awesome; ...; end)
您可以使用带有一些支持库的 TestUnit 相对轻松地实现这两者……但我更喜欢使用 RSpec。
当您编写代码和测试时,通常(总是?)最好从外部开始:IE,编写集成测试(登录用户单击按钮将 5.00 美元的商品添加到购物车,然后结帐,然后支付。他的信用卡应该被收取 5.00 美元)。因此,与其测试特定的类行为(就像您使用单元测试一样),您将希望在数据库中创建对象并进行 get / post / etc. 调用,以类似于用户 Web 浏览器的方式与站点交互会,使您的测试渗透整个堆栈。
最近我喜欢在 RSpec 中使用 Steak 进行集成测试(使用 Capybara 来促进 Web 交互)
一旦你建立了你的外围,那么我建议你开始关注单元测试。
单元测试对于记录类的行为非常有用。我将它们围绕方法分组,并描述可以传递给方法的内容,以及我期望返回的内容。
describe Object do
describe "#method" do
it "returns 4 when passed 2" do
...
end
end
end