Каковы преимущества Mocha перед встроенным фреймворком mocking от RSpec?

StackOverflow https://stackoverflow.com/questions/1406692

Вопрос

Я заметил, что многие люди предпочитают 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. Я использую тест / юнит, а тест / юнит не имеет встроенных заглушек и насмешек.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top