Pregunta

Me he dado cuenta de que mucha gente prefiere Mocha sobre el marco de burla incorporado de RSpec. ¿Alguien puede explicar las ventajas de Mocha, o cualquier alternativa, sobre el marco de burla de RSpec incorporado?

¿Fue útil?

Solución

Una característica específica que realmente me gusta es poder eliminar todas las instancias de una clase. Muchas veces hago algo como lo siguiente con las simulaciones de RSpec:

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)

La versión Mocha me parece más clara y explícita.

Otros consejos

Los marcos de burlas de Ruby han evolucionado mucho desde que se hizo esta pregunta en 2009. Así que aquí hay una pequeña comparación de 2013:

Expectativas

  • con Rspec-mocks: esperar (usuario) .para recibir (: say_hello)
  • con Mocha: user.expects(:say_hello).once

Apagar un objeto

  • con Rspec-mocks: usuario = doble (nombre: 'John Doe')
  • con Mocha: usuario = stub (nombre: 'John Doe')

Aplastando cualquier cosa

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

Ofrecen las mismas facilidades, y ambas pueden usarse con o sin Rspec.
Así que diría que elegir uno sobre otro es una cuestión de gusto personal (y su sabor es muy parecido).

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

También, para aquellos que prefieren cambiar entre los marcos de prueba, Mocha es una solución universal aplicable para Pruebas / Unidades, Shoulda, etc. Usar la burla RSpec con todas estas libs será una exageración.

Por un lado uso mocha porque no uso rspec. Utilizo la prueba / unidad, y la prueba / unidad no tiene el apéndice y la burla incorporados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top