Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么我应该在Rails中使用RSpec或shoulda?_Ruby On Rails_Ruby_Unit Testing_Testing_Shoulda - Fatal编程技术网

Ruby on rails 为什么我应该在Rails中使用RSpec或shoulda?

Ruby on rails 为什么我应该在Rails中使用RSpec或shoulda?,ruby-on-rails,ruby,unit-testing,testing,shoulda,Ruby On Rails,Ruby,Unit Testing,Testing,Shoulda,我正在安装一个rails应用程序,我刚刚完成了一些单元测试,我的朋友说,显然,固定装置不再酷了,人们现在正在使用RSpec或shoulda。我想知道使用这些其他工具包的实际好处是什么。欢迎提供任何信息 -fREWRSpec功能更强大,因为它更容易读取和写入测试。在使用mock和stub时,它也非常优雅,一旦您开始在测试中使用它们,这一概念将变得非常有用。在一个简单的测试应用程序(NON-RAILS!)中尝试一下,您将看到您的规范相对于同等的标准测试是多么优雅。RSpec和类似的框架是为帮助行为驱

我正在安装一个rails应用程序,我刚刚完成了一些单元测试,我的朋友说,显然,固定装置不再酷了,人们现在正在使用RSpec或shoulda。我想知道使用这些其他工具包的实际好处是什么。欢迎提供任何信息


-fREW

RSpec功能更强大,因为它更容易读取和写入测试。在使用mock和stub时,它也非常优雅,一旦您开始在测试中使用它们,这一概念将变得非常有用。在一个简单的测试应用程序(NON-RAILS!)中尝试一下,您将看到您的规范相对于同等的标准测试是多么优雅。

RSpec和类似的框架是为帮助行为驱动开发而设计的工具。它们不仅仅是编写测试的一种更漂亮的方式,尽管它们确实有助于编写测试

这里有大量关于BDD的信息: 和维基百科:


这里列出的好处太多了,所以我建议浏览一下该网站。

我个人更喜欢Shoulda而不是RSpec。我发现Shoulda的语法比RSpec少。我对RSpec的问题是,当我大声读的时候,它是非常可读的,但是当我开始写它的时候,嗯,我永远不知道一个给定的断言应该如何写。他还举了几个例子。

这里有两个不同的东西:

第一件事是使用什么框架来编写测试/规范。在这里,您可以在Test::Unit、RSpec、Shoulda等之间进行选择。选择是您想做传统的TDD(Test::Unit),还是您更喜欢开发人员提倡的指定行为的替代方法,如(RSpec和某种程度上的Shoulda)


第二件事是如何处理测试数据。还有一些轨道固定装置和替代品,它们与其他目标一起设计,例如。在Rails 2.0之前,固定装置存在重大且有充分记录的实际问题。许多实际问题在Rails 2.0中得到了解决。但是,fixture可能会导致无意中的测试耦合,一些替代方案会试图避免这种情况。

请查看Josh Susser的文章,以比较流行的Ruby测试框架。

如果您正在构建一个大型应用程序,并且没有一个团队真正擅长编写能够用黑盒进行良好测试的解耦代码测试和调试准备充分使用/调试大量模拟和存根,不要走工厂道路

无论你在哪里读到关于工厂是多么棒的文章,你都会看到一点警告:工厂在大型应用程序中可能不可行,因为它们比固定装置慢一点

但“稍微慢一点”实际上要慢几个数量级

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

就在今晚,我将一个工厂转换为fixture,使用它的测试文件的运行时间从65秒变为15秒,尽管该测试文件中只有大约15%的测试使用该工厂


如果使用minitest,则可以随机顺序运行测试;这将很快揭示测试之间的任何数据耦合。(不确定rspec是否可以选择随机化测试顺序)

test::Unit适用于小型应用程序。但是使用像Shoulda或RSpec这样的测试框架有很多好处。G上下文


我不认为Shoulda和RSpec是非此即彼的关系。当涉及到单断言测试时,我使用Shoulda作为RSpec的替代品。我真的很喜欢Shoulda一行程序,但是在RSpec中编写匹配程序要容易得多。因此,我的建议是在最适合的地方使用不同的测试工具。

您可以使用Cucumber之类的测试框架,它甚至比RSpec更快。

我完全同意webmat。我真的很难理解RSpec语法,因为它有太多的语法糖分。它将普通的短语转换成代码,但你必须弄清楚它应该做什么!曲线很陡,我很懒。我过去也对甜言蜜语的语法有点怀疑,但在阅读之后,我实际上用RSpec的语法编写断言没有任何问题。(也许自您回答后,文档在2.5年内变得更好。^^)事实上,我现在更喜欢RSpec的期望,而不是Test::Unit的断言(这仍然不关心“英语可读性”(mis-)特性)。