Я замечаю, что многие люди предпочитают Mocha над RSpec, встроенным в насмешливую структуру. Может ли кто-нибудь объяснить преимущества Mocha или любой другой альтернативы для RSpec, построенного в насмешливой структуре?
В чем преимущества Mocha над RSpec, построенные в насмешливой структуре?
Ответ 1
Одна особенность, которая мне очень нравится, - это возможность вырезать все экземпляры класса. Много раз я делал что-то вроде следующего с RSpec mocks:
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 более ясной и более явной.
Ответ 2
Ruby mocking frameworks сильно изменились с тех пор, как этот вопрос был задан в 2009 году. Итак, вот сравнение в 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')
- с моккой:
User.any_instance.stubs(:name).returns('John Doe')
Они предлагают те же самые возможности, и оба могут использоваться с Rspec или без них.
Поэтому я бы сказал, что выбор одного над другим - это вопрос личного вкуса (и они очень похожи друг на друга).
Ответ 3
Насколько я знаю, Mocha поддерживает Double Injections (aka Partial Mocking, который также поддерживается в rr), не уверен, что RSpec также поддерживает эту функцию.
Кроме того, для тех, кто предпочитает переключаться между платформами тестирования, Mocha является универсальным решением, применимым для Test/Unit, Shoulda и т.д. Использование RSpec, издевающегося над всеми этими библиотеками, будет излишним.
Ответ 4
I для одного использования мокко, потому что я не использую rspec. Я использую тест/блок, а тестовый/блок не имеет заглушки и издевательств.