2009-09-10 8 views

Respuesta

30

Una característica específica que realmente me gusta es poder anular todas las instancias de una clase. Una gran cantidad de veces que hacer algo como lo siguiente con RSpec burla:

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

con Mocha que se convierte en:

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

puedo encontrar la versión Mocha más clara y explícita.

+1

any_instance es probablemente * la * razón para usar Mocha. Es increíblemente poderoso y puede ahorrar mucho tiempo. –

+19

Puede hacer esto con RSpec 2 ahora: https: //www.relishapp.com/rspec/rspec-mocks/docs/method-stubs/stub-on-any-instance-of-a-class –

+3

Sí, esta respuesta no está actualizada. ¿Es posible "desmarcarlo"? –

3

I para un uso mocha porque no uso rspec. Uso test/unit, y test/unit no tiene stubbing ni burla incorporados.

+1

[Rspec-mocks] (https://github.com/rspec/rspec-mocks) ahora es un proyecto independiente que se puede usar en cualquier proyecto que no sea Rspec. –

4

Por lo que sé Mocha admite inyecciones dobles (también conocido como burla parcial, que también se admite en rr), no estoy seguro de que RSpec también admita esta función.

Además, para aquellos que prefieren cambiar entre frameworks de prueba, Mocha es una solución universal aplicable para Test/Unit, Shoulda, etc. Usar RSpec Mocking con todas estas librerías será una exageración.

+1

[Rspec-mocks] (https://github.com/rspec/rspec-mocks) ahora es un proyecto independiente que se puede usar en cualquier proyecto que no sea Rspec. –

36

Rubí burlarse de los marcos han evolucionado mucho desde que esta pregunta se ha hecho en el año 2009. Así que aquí es un poco de comparación 2013:

expectativas

  • con RSpec-burla: expect(user).to receive(:say_hello)
  • con Mocha: user.expects(:say_hello).once

Stubbing un objeto

  • con RSpec-burla: user = double(name: 'John Doe')
  • con Mocha: user = stub(name: 'John Doe')

Stubbing nada

  • con RSpec-burla: User.any_instance.stub(:name).and_return('John Doe')
  • con Mocha: User.any_instance.stubs(:name).returns('John Doe')

Ofrecen las mismas instalaciones, y ambas se pueden utilizar con o sin Rspec.
Así que yo diría que elegir uno sobre otro es una cuestión de gusto personal (y saben muy bien).

+1

Increíblemente útil para tener algunas comparaciones concretas, +1 –

Cuestiones relacionadas