Каковы преимущества Mocha перед встроенным фреймворком mocking от RSpec?
-
05-07-2019 - |
Вопрос
Я заметил, что многие люди предпочитают Mocha встроенному фреймворку mocking от RSpec.Кто-нибудь может объяснить преимущества Mocha или любой другой альтернативы по сравнению с RSpec, построенными в рамках mocking?
Решение
Одна особенность, которая мне действительно нравится, - это возможность заглушить все экземпляры класса. Много раз я делаю что-то вроде следующего с макетами 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 более четкая и понятная.
Другие советы
Фреймворки-имитаторы Ruby сильно эволюционировали с тех пор, как этот вопрос был задан в 2009 году.Итак, вот небольшое сравнение за 2013 год:
Ожидания
- с помощью Rspec-издевательств:
expect(user).to receive(:say_hello)
- с Мокко:
user.expects(:say_hello).once
Заглушение объекта
- с помощью Rspec-издевательств:
user = double(name: 'John Doe')
- с Мокко:
user = stub(name: 'John Doe')
Заглушить что- нибудь
- с помощью Rspec-издевательств:
User.any_instance.stub(:name).and_return('John Doe')
- с Мокко:
User.any_instance.stubs(:name).returns('John Doe')
Они предлагают одни и те же возможности, и оба могут использоваться как с Rspec, так и без него.
Поэтому я бы сказал, что выбор одного из них перед другим - это вопрос личного вкуса (а на вкус они очень похожи).
Насколько я знаю, Mocha поддерживает двойные инъекции (также называемые частичным копированием, которые также поддерживаются в rr), не уверен, что RSpec также поддерживает эту функцию.
Кроме того, для тех, кто предпочитает переключаться между средами тестирования, Mocha является универсальным решением, применимым для Test / Unit, Shoulda и т. д. Использование RSpec-mocking со всеми этими библиотеками будет излишним.
Я использую мокко, потому что я не использую rspec. Я использую тест / юнит, а тест / юнит не имеет встроенных заглушек и насмешек.