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

Lee*_*Lee 32 ruby rspec ruby-on-rails mocking

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

Jer*_*ert 40

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

期望

  • 与Rspec-mocks: expect(user).to receive(:say_hello)
  • 与摩卡: user.expects(:say_hello).once

捣乱一个物体

  • 与Rspec-mocks: user = double(name: 'John Doe')
  • 与摩卡: user = stub(name: 'John Doe')

咬住任何东西

  • 与Rspec-mocks: User.any_instance.stub(:name).and_return('John Doe')
  • 与摩卡: User.any_instance.stubs(:name).returns('John Doe')

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


Pet*_*son 31

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

stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)
Run Code Online (Sandbox Code Playgroud)

与摩卡成为:

Car.any_instance.stubs(:speed).returns(100)
Run Code Online (Sandbox Code Playgroud)

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

  • 您现在可以使用RSpec 2执行此操作:https://www.relishapp.com/rspec/rspec-mocks/docs/method-stubs/stub-on-any-instance-of-a-class (20认同)
  • 是的,这个答案已经过时了.是否可以"取消选中"它? (3认同)