Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 微型测试和Rspec_Ruby On Rails_Ruby_Testing_Rspec_Minitest - Fatal编程技术网

Ruby on rails 微型测试和Rspec

Ruby on rails 微型测试和Rspec,ruby-on-rails,ruby,testing,rspec,minitest,Ruby On Rails,Ruby,Testing,Rspec,Minitest,我刚刚看了一场小型测试 使用RSpec和Minitest测试rails应用程序的优缺点是什么?从RSpec转换为Minitest时,我会丢失哪些功能?我使用shoulda从测试/单元转换为规范样式的Minitest,这是值得的。它废除了样板文件,他们说它还提高了速度。我从未真正使用过RSpec。相反,我编写了自己的原始测试和模拟框架(只是为了理解模拟,我在切换到Minitest时放弃了它)。我认为RSpec中的stubing/mock可能更高级,所以如果您已经学会了,就继续使用它吧。否则,请坚持

我刚刚看了一场小型测试


使用RSpec和Minitest测试rails应用程序的优缺点是什么?从RSpec转换为Minitest时,我会丢失哪些功能?

我使用
shoulda
测试/单元
转换为规范样式的Minitest,这是值得的。它废除了样板文件,他们说它还提高了速度。我从未真正使用过RSpec。相反,我编写了自己的原始测试和模拟框架(只是为了理解模拟,我在切换到Minitest时放弃了它)。我认为RSpec中的stubing/mock可能更高级,所以如果您已经学会了,就继续使用它吧。否则,请坚持使用Minitest,这将使您能够与不了解RSpec的人合作,例如我。

我是RSpec开发人员之一,从未使用过Minitest,因此在阅读此答案时请考虑我的偏见

总的来说,RSpec的力量来自这样一个事实:它将如此多的测试概念具体化为第一类对象。当Test::Unit和Minitest使用简单的方法进行断言时,RSpec使用支持否定、自描述等的一流matcher对象。RSpec的例子是支持丰富元数据的一流对象;minitest/spec将
it
块编译成简单的方法,这些方法不支持相同种类的丰富元数据。RSpec支持使用接受参数的一级构造(共享示例组)指定共享行为;您可以使用w/minitest,但它没有相同种类的一流支持。RSpec有一个显式的格式化程序API(有许多第三方格式化程序使用它);我不知道minitest有相同种类的一流格式化程序API

作为一个整天不断运行测试和练习TDD的人,我发现RSpec给我的力量非常有用。然而,许多人发现这是过分的,额外的抽象会增加认知成本

以下是我认为minitest缺乏的RSpec的一些特定功能:

  • before(:all)
    hooks(注意这是RSpec的超级用户特性,应该很少使用;在使用RSpec的多年中,我只在少数情况下使用过它)
  • 周围(:每个)
    挂钩
  • 共享示例组
  • 共享上下文
  • 丰富的元数据支持,可用于控制哪些示例运行、哪些示例组共享上下文包含在其中、哪些示例组模块混入其中等等
  • 集成支持多种模拟功能,包括rspec模拟;相比之下,Minitest::Mock更简单,也更有限
  • RSpec有,这太棒了
使用Minitest的好处:

  • 它内置于标准库中,因此您不需要安装任何额外的内容
  • 它可以在
    def test_blah
    It'blah'
    样式中使用
  • 代码库非常小且简单。相比之下,RSpec更大,因为它的年龄更大,功能更丰富
  • Minitest的加载速度比RSpec快(它大约有4个代码文件,而RSpec有许多文件分布在3个gem上)——但请注意,RSpec绝不慢;在我这些天的大多数项目中,我在不到一秒钟的时间内(通常在不到500毫秒的时间内)从RSpec获得测试反馈
总的来说,它有点像Sinatra vs.Rails,我认为Minitest和RSpec都是不错的选择,这取决于您的需要


最后一件事:如果您更喜欢Minitest的某些特定方面,但是您更喜欢RSpec的其他方面,那么它们可以很容易地混合和匹配。I,如果您感兴趣的话。

请参阅,例如,也许这两个问题应该合并,有没有合并问题的方法?以+12票结束!!!投票开放。投票接近的问题是,他们通常不是很有建设性的……只要提到2020年的rspec fire
是“完全过时的”,其功能内置于rspec 3本身。