我正在搭建一个Rails应用程序,我刚刚完成了一些单元测试,我的朋友说,显然fixtures已经不再流行了,现在人们正在使用RSpec或shoulda。我想知道使用这些其他工具包的实际好处是什么。非常感谢任何信息。
-fREW
我正在搭建一个Rails应用程序,我刚刚完成了一些单元测试,我的朋友说,显然fixtures已经不再流行了,现在人们正在使用RSpec或shoulda。我想知道使用这些其他工具包的实际好处是什么。非常感谢任何信息。
-fREW
我个人更喜欢Shoulda而不是RSpec。 我发现Shoulda比RSpec具有更少的语法魔法。 我对RSpec的问题是,当我大声朗读它时确实很易读,但当我开始编写时,我从来不确定给定断言应该如何书写。Prag Dave比我更好地解释了这个问题。他还喜欢Shoulda并提供了一些例子。
RSpec和类似的框架是为了辅助行为驱动开发而设计的工具。它们不仅仅是可以更美观地编写测试用例,虽然它们确实有这方面的帮助。
关于BDD,这里有很多信息:http://behaviour-driven.org/ 和维基百科:http://en.wikipedia.org/wiki/Behavior_Driven_Development
由于好处太多,这里就不一一列举了,建议您逛逛那个网站。
这里有两个不同的事情:
第一件事是选择用于编写测试/规范的框架。您可以在Test::Unit、RSpec、Shoulda等之间进行选择。选择是您想要进行传统TDD(Test::Unit)还是您更喜欢像David Chemlinsky(RSpec和在某种程度上Shoulda)开发人员所倡导的关于指定行为的替代思考方式。
第二件事是如何处理测试数据。有Rails fixtures以及专为其他目标设计的替代品,例如FixtureReplacement插件。在Rails 2.0之前,fixtures存在重大且有记录的实际问题。许多实际问题已在Rails 2.0中得到解决。但是fixtures可能会导致无意中测试耦合,而某些替代方法则试图避免这种情况。
RSpec更加强大,因为测试的阅读和编写更加容易。在使用模拟和桩时,它也非常优雅,一旦您在测试中开始使用它们,这个概念将变得非常有用。在一个简单的测试应用程序(非Rails!)中尝试一下,您将看到与等效标准测试相比,您的规范是多么优雅。
Test::Unit适用于小型应用程序。但是使用像Shoulda或RSpec这样的测试框架有很多好处,例如上下文!
我不认为Shoulda和RSpec是二选一的关系。当涉及到单个断言测试时,我使用Shoulda代替RSpec。我真的很喜欢Shoulda的一行代码,但在RSpec中编写匹配器要容易得多。因此,我的建议是在最合适的地方使用不同的测试工具。
你可以使用像Cucumber这样的测试框架,它比RSpec更快。