我正在设置一个 Rails 应用程序,我刚刚完成了一些单元测试,我的朋友说显然夹具不再酷,人们现在正在使用 RSpec 或 shoulda。我想知道使用这些其他工具包的实际好处是什么。任何信息都表示赞赏。
-fREW
我正在设置一个 Rails 应用程序,我刚刚完成了一些单元测试,我的朋友说显然夹具不再酷,人们现在正在使用 RSpec 或 shoulda。我想知道使用这些其他工具包的实际好处是什么。任何信息都表示赞赏。
-fREW
我个人更喜欢Shouda而不是RSpec。我发现 Shoulda 的魔法语法比 RSpec 少。我对 RSpec 的问题是,是的,当我大声朗读它时它非常易读,但是当我开始编写它时,嗯,我永远不确定应该如何编写给定的断言。Prag Dave 比我更好地解释了这个问题。他也喜欢Shouda ,并举了几个例子。
RSpec 和类似框架是旨在帮助行为驱动开发的工具。它们不仅是编写测试的更漂亮的方式,尽管它们确实对此有所帮助。
这里有很多关于 BDD 的信息:http: //behaviour-driven.org/ 和维基百科:http ://en.wikipedia.org/wiki/Behavior_Driven_Development
这里列出的好处太多了,所以我建议稍微浏览一下那个网站。
这里有两个不同的东西:
首先是使用什么框架来编写测试/规范。在这里,您可以在 Test::Unit、RSpec、Shouda 等之间进行选择。选择是您是否想要执行传统的 TDD(Test::Unit),或者您是否更喜欢David Chemlinsky(RSpec 和某种程度上的 Shoulda)等开发人员所倡导的指定行为的替代思考方式。
第二件事是如何处理测试数据。有 Rails 固定装置和替代方案设计有其他目标,例如FixtureReplacement 插件。在 Rails 2.0 之前,fixture 存在重大且有据可查的实际问题。Rails 2.0 中修复了许多实际问题。然而,夹具可能会导致无意的测试耦合,一些替代方案试图避免这种情况。
RSpec 更强大,因为它更容易读取和编写测试。使用模拟和存根时它也非常优雅,一旦你开始在测试中使用它们,这个概念将变得非常有用。在一个简单的测试应用程序(NON RAILS!)中尝试它,您会发现您的规格与同等标准测试相比有多优雅。
查看 Josh Susser 的The Great Test Framework Dance-off以比较流行的 Ruby 测试框架。
如果您正在构建一个大型应用程序并且没有一个团队都非常擅长编写可以通过黑盒测试进行良好测试的解耦代码,并且准备完全接受使用/调试大量模拟和存根,请不要不要沿着工厂路走。
无论你在哪里读到关于 Awesome Factories Are 的文章,你都会看到一些关于工厂在大型应用程序中可能不可行的警告,因为它们比固定装置慢一点。
但是“慢一点”确实慢了几个数量级。
工厂并不比使用标签作为 id 的夹具容易得多,只要您保持夹具井井有条。在某些情况下,工厂更难调试。
就在今晚,我将一个工厂转换为固定装置,使用它的测试文件的运行时间从 65 秒变为 15 秒,尽管该测试文件中只有大约 15% 的测试使用该工厂。
如果你使用 minitest,你可以随机运行你的测试;这将很快揭示测试之间的任何数据耦合。(不确定 rspec 是否可以选择随机化测试顺序)
Test::Unit 适用于小型应用程序。但是使用像 Shoulda 或 RSpec 这样的测试框架有很多好处,例如上下文!
我不认为应该和 RSpec 存在非此即彼的关系。在进行单断言测试时,我使用 Shoulda 作为 RSpec 的替代品。我真的很喜欢 Shoulda 单线,但是在 RSpec 中编写匹配器要容易得多。所以我的建议是在最适合的地方使用不同的测试工具。
您可以使用 Cucumber 之类的测试框架,它比 RSpec 更快。