Каковы преимущества Mocha по сравнению со встроенной системой моделирования RSpec? - PullRequest
32 голосов
/ 10 сентября 2009

Я заметил, что многие люди предпочитают Mocha встроенному в RSpec фреймворку. Может кто-нибудь объяснить преимущества Mocha или любой другой альтернативы над встроенным в RSpec фреймворком?

Ответы [ 4 ]

39 голосов
/ 21 августа 2013

Платформы для Ruby Mocking сильно изменились с тех пор, как в 2009 году был задан этот вопрос. Вот небольшое сравнение за 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.
Поэтому я бы сказал, что выбирать один из них - дело личного вкуса (и они на вкус довольно похожи).

31 голосов
/ 13 сентября 2009

Одна особенность, которая мне действительно нравится, это возможность заглушить все экземпляры класса. Много раз я делаю что-то вроде следующего с макетами RSpec:

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

с мокко, которое становится:

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

Я считаю версию Mocha более четкой и ясной.

4 голосов
/ 11 сентября 2009

Насколько я знаю, Mocha поддерживает двойные инъекции (также известную как Partial Mocking, которая также поддерживается в rr), не уверен, что RSpec также поддерживает эту функцию.

Кроме того, для тех, кто предпочитает переключаться между средами тестирования, Mocha является универсальным решением, применимым для Test / Unit, Shoulda и т. Д. Использование RSpec-mocking со всеми этими библиотеками будет излишним.

3 голосов
/ 11 сентября 2009

Я использую мокко, потому что я не использую rspec. Я использую тест / юнит, а тест / юнит не имеет встроенных заглушек и насмешек.

...