我正在设置一个Rails应用程序,我刚完成一些单元测试,我的朋友说,显然装置不再酷,人们现在正在使用RSpec或shoulda。我想知道使用这些其他工具包的实际好处是什么。任何信息都是值得赞赏的。为什么要在Rails中使用RSpec或shoulda?
-fREW
我正在设置一个Rails应用程序,我刚完成一些单元测试,我的朋友说,显然装置不再酷,人们现在正在使用RSpec或shoulda。我想知道使用这些其他工具包的实际好处是什么。任何信息都是值得赞赏的。为什么要在Rails中使用RSpec或shoulda?
-fREW
RSpec和类似的框架是设计用于辅助行为驱动开发的工具。他们不仅仅是一种更好的编写测试的方式,尽管他们对此有所帮助。
有大量的信息在这里BDD:http://behaviour-driven.org/ 和Wikipedia:http://en.wikipedia.org/wiki/Behavior_Driven_Development
有太多的好处在这里列出,所以我建议你浏览该网站的一点。
RSpec的是方式更强大,因为它要容易得多同时读取和写入测试。使用嘲弄和存根时,一个概念,这将成为非常有用的,一旦你开始使用它们它也非常优雅你的测试。尝试一个简单的测试应用程序(NON RAILS!),您会看到您的规格与同等标准测试相比有多优雅。
我个人比较喜欢Shouldpec来RSpec。我发现Shoulda的语法比RSpec少。我对RSpec的问题是,当我大声朗读它时,它的可读性非常好,但是当我开始写它时,嗯,我不敢肯定应该如何写出给定的断言。 Prag Dave explains the problem better than me。他也likes Shoulda,并有几个例子。
这里有两个不同的东西:
第一件事是什么框架用于编写测试/规格。在这里您可以选择Test :: Unit,RSpec,Shoulda等。你可以选择传统的TDD(Test :: Unit),还是更喜欢用David Chemlinsky(RSpec和某种程度上Shoulda)这样的开发者所倡导的特定行为的替代方法。
第二件事是如何处理测试数据。有其他目标设计的Rails灯具和替代产品,如the FixtureReplacement plugin。在Rails 2.0设备之前,有很多重要且有据可查的实际问题。 Rails 2.0中修复了许多实际问题。然而夹具可能导致无意的测试耦合,并且一些替代方法试图避免这种情况。
查看Josh Susser的The Great Test Framework Dance-off,以比较流行的Ruby测试框架。
如果你正在建设一个大型的应用程序,并且没有一个团队,都是真的擅长写作脱钩代码可以用黑箱测试以及测试和准备使用/调试很多嘲笑&的完全接受存根,不要沿工厂道路走下去。
无论你在哪里阅读关于Awesome工厂的信息你会看到关于工厂如何在大型应用程序中不可行的警告,因为它们比夹具慢一点。
但是“慢一点”实际上慢了几个数量级。
工厂并不比使用ID标签的夹具更容易编码,只要您保持夹具的组织。在某些情况下,工厂更难调试。
就在今天晚上,我将一个工厂转换为灯具,并且使用它的测试文件的运行时间从65秒变为15秒,即使该测试文件中只有大约15%的测试使用该工厂。
如果您使用minitest,您可以按随机顺序运行测试;这将很快显示测试之间的任何数据耦合。 (不知道rspec是否可以随机选择测试订单)
Test :: Unit适用于小型应用。但是使用像Shoulda或RSpec这样的测试框架有很多好处。 G。背景!
我没有看到Shoulda和RSpec在任何关系中。当涉及单断言测试时,我使用Shoulda作为RSpec的替代品。我非常喜欢Shoulda单线程,但在RSpec中编写匹配器要容易得多。所以我的建议是在最适合的地方使用不同的测试工具。
您可以使用像黄瓜这样的测试框架,它比RSpec更快。
我完全同意webmat。我真的很难理解RSpec语法,因为它有太多的语法糖。它将普通的短语变成代码,但是你已经知道它应该做什么了!曲线陡峭,我很懒。 – srboisvert 2008-09-21 20:50:00