2008-09-21 30 views
33

我正在设置一个Rails应用程序,我刚完成一些单元测试,我的朋友说,显然装置不再酷,人们现在正在使用RSpec或shoulda。我想知道使用这些其他工具包的实际好处是什么。任何信息都是值得赞赏的。为什么要在Rails中使用RSpec或shoulda?

-fREW

回答

4

RSpec的是方式更强大,因为它要容易得多同时读取和写入测试。使用嘲弄和存根时,一个概念,这将成为非常有用的,一旦你开始使用它们它也非常优雅你的测试。尝试一个简单的测试应用程序(NON RAILS!),您会看到您的规格与同等标准测试相比有多优雅。

22

我个人比较喜欢Shouldpec来RSpec。我发现Shoulda的语法比RSpec少。我对RSpec的问题是,当我大声朗读它时,它的可读性非常好,但是当我开始写它时,嗯,我不敢肯定应该如何写出给定的断言。 Prag Dave explains the problem better than me。他也likes Shoulda,并有几个例子。

+1

我完全同意webmat。我真的很难理解RSpec语法,因为它有太多的语法糖。它将普通的短语变成代码,但是你已经知道它应该做什么了!曲线陡峭,我很懒。 – srboisvert 2008-09-21 20:50:00

7

这里有两个不同的东西:

第一件事是什么框架用于编写测试/规格。在这里您可以选择Test :: Unit,RSpec,Shoulda等。你可以选择传统的TDD(Test :: Unit),还是更喜欢用David Chemlinsky(RSpec和某种程度上Shoulda)这样的开发者所倡导的特定行为的替代方法。

第二件事是如何处理测试数据。有其他目标设计的Rails灯具和替代产品,如the FixtureReplacement plugin。在Rails 2.0设备之前,有很多重要且有据可查的实际问题。 Rails 2.0中修复了许多实际问题。然而夹具可能导致无意的测试耦合,并且一些替代方法试图避免这种情况。

2

如果你正在建设一个大型的应用程序,并且没有一个团队,都是真的擅长写作脱钩代码可以用黑箱测试以及测试和准备使用/调试很多嘲笑&的完全接受存根,不要沿工厂道路走下去。

无论你在哪里阅读关于Awesome工厂的信息你会看到关于工厂如何在大型应用程序中不可行的警告,因为它们比夹具慢一点。

但是“慢一点”实际上慢了几个数量级。

工厂并不比使用ID标签的夹具更容易编码,只要您保持夹具的组织。在某些情况下,工厂更难调试。

就在今天晚上,我将一个工厂转换为灯具,并且使用它的测试文件的运行时间从65秒变为15秒,即使该测试文件中只有大约15%的测试使用该工厂。

如果您使用minitest,您可以按随机顺序运行测试;这将很快显示测试之间的任何数据耦合。 (不知道rspec是否可以随机选择测试订单)

1

Test :: Unit适用于小型应用。但是使用像Shoulda或RSpec这样的测试框架有很多好处。 G。背景!

我没有看到Shoulda和RSpec在任何关系中。当涉及单断言测试时,我使用Shoulda作为RSpec的替代品。我非常喜欢Shoulda单线程,但在RSpec中编写匹配器要容易得多。所以我的建议是在最适合的地方使用不同的测试工具。

0

您可以使用像黄瓜这样的测试框架,它比RSpec更快。