Mocha优于RSpec内置的模拟框架有什么优势?

时间:2009-09-10 17:44:10

标签: ruby-on-rails ruby mocking rspec

我注意到很多人更喜欢Mocha而不是RSpec内置的模拟框架。有人可以解释摩卡的优势,或任何替代方案,而不是RSpec内置的模拟框架吗?

4 个答案:

答案 0 :(得分:39)

自从2009年提出这个问题以来,Ruby模拟框架已经发生了很大变化。所以这里有一个2013年的比较:

<强>期望

  • 使用Rspec-mocks:expect(user).to receive(:say_hello)
  • 与Mocha:user.expects(:say_hello).once

对象进行存根

  • 使用Rspec-mocks:user = double(name: 'John Doe')
  • 与Mocha:user = stub(name: 'John Doe')

存根任何事情

  • 使用Rspec-mocks:User.any_instance.stub(:name).and_return('John Doe')
  • 与Mocha:User.any_instance.stubs(:name).returns('John Doe')

他们提供相同的设施,两者都可以使用或不使用Rspec 所以我会说选择一个是另一个是个人品味(它们的味道非常相似)。

答案 1 :(得分:31)

我真正喜欢的一个特定功能是能够存根所有类的实例。很多时候我使用RSpec模拟执行以下操作:

stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)

与Mocha成为:

Car.any_instance.stubs(:speed).returns(100)

我发现Mocha版本更清晰,更明确。

答案 2 :(得分:4)

据我所知,Mocha支持双注入(也称为部分模拟,rr也支持),不确定RSpec是否也支持此功能。

此外,对于那些喜欢在测试框架之间切换的人来说,Mocha是适用于Test / Unit,Shoulda等的通用解决方案。使用RSpec模拟所有这些库将是一种过度杀伤。

答案 3 :(得分:3)

我一个人使用摩卡,因为我不使用rspec。我使用test / unit,test / unit没有内置的stubing和mocking。