2011-06-23 54 views
0

我们现在有一个相当大的rails(2.3.9)应用程序,带有0个rails测试用例。 (什么???)。是。有可能的:)。如果我们想要在一个框架上测试,我们应该选择哪一个,cucumber,rspec1或rails在测试框架中构建的吗?我只说一个框架的原因是因为为了相同的目的而学习和管理多个框架的复杂性。Rails 2.3.9测试框架 - rspec1,黄瓜或rails内置测试框架

Q1:一些Y2009的SO questions建议使用rspec的 单元测试用于测试 视图 模型/控制器和黄瓜。那(截至2011年6月23日 2011)仍然是一个有效的建议?

Q2:有没有人成功地建立起所有 他们需要在一个单一 框架测试用例(说只是Cucumber)?如果 是哪一个?

回答

1

这是有点偏好的问题,但三个我会选择rspec或Test :: Unit。 RSpec的已经被批评为过度设计最近,但我真的很喜欢:

  • 的匹配语法(value.should == 1assert_equal(value, 1)
  • 测试的名字并不局限于方法名(it "does something awesome" { ... } VS def test_it_does_something_awesome; ...; end

你可以使用TestUnit和一些支持库来实现这两个功能,但是我更喜欢使用RSpec。当您编写代码和测试时,通常(总是?)最好从外部开始:IE,编写一个集成测试(登录用户点击一个按钮将$ 5.00项目添加到购物车,然后签出,并支付,他的信用卡应收取5.00美元)。因此,与其测试特定的类行为(就像使用单元测试一样),您需要在数据库中创建对象,并以类似于用户Web浏览器的方式进行与站点交互的get/post/etc.调用会让你的测试渗透整个堆栈。

最近我一直在使用的RSpec的内部牛排我集成测试(使用水豚,以方便web交互)

一旦你建立你的外周长喜欢,那么我建议你开始关注单元测试。

单元测试对于记录一个类的行为是非常棒的。我将它们分组在方法中,并描述可以传递给方法的内容以及我期望返回的内容。

describe Object do 
    describe "#method" do 
    it "returns 4 when passed 2" do 
     ... 
    end 
    end 
end 
2

问题1:这取决于你的开发者。基本上你可以用所有框架测试几乎相同的东西。我会亲自去rspec1。你会发现rspec的许多资源,尤其是rails 2.3.x.从长远来看,我会尝试将项目迁移到rails 3.等待的时间越长,它就越痛苦。

Q2:不,AFAIK黄瓜用于集成测试。你可以使用rspec或者testunit,但是你会缺少集成测试。如果你只进行集成测试,你会缺少单元测试,但你需要单元(或行为)测试。此外,你应该投入一些时间在嘲笑框架,因为它们会节省你很多时间。