Domanda

Ho notato che molte persone preferiscono Mocha al framework di derisione incorporato di RSpec. Qualcuno può spiegare i vantaggi di Mocha, o di qualsiasi alternativa, rispetto a RSpec costruito in un quadro beffardo?

È stato utile?

Soluzione

Una caratteristica specifica che mi piace molto è la possibilità di stubare tutte le istanze di una classe. Molte volte faccio qualcosa come il seguente con RSpec mock:

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

con Mocha che diventa:

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

Trovo la versione Mocha più chiara ed esplicita.

Altri suggerimenti

I framework di derisione di Ruby si sono evoluti molto da quando questa domanda è stata posta nel 2009. Quindi ecco un piccolo confronto del 2013:

Le aspettative

  • con Rspec-mock: aspetta (utente) .per ricevere (: say_hello)
  • con Mocha: user.expects(:say_hello).once

Stubbing un oggetto

  • con Rspec-mock: user = double (nome: 'John Doe')
  • con Mocha: user = stub (nome: 'John Doe')

Stubbing qualsiasi cosa

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

Offrono gli stessi servizi ed entrambi possono essere utilizzati con o senza Rspec.
Quindi direi che scegliere uno sopra l'altro è una questione di gusti personali (e hanno un sapore abbastanza simile).

Per quanto ne so Mocha supporta Double Injections (aka Partial Mocking, anch'esso supportato in rr), non sono sicuro che anche RSpec supporti questa funzione.

Inoltre, per coloro che preferiscono passare da un framework di test all'altro, Mocha è una soluzione universale applicabile a Test / Unità, Shoulda, ecc. L'uso del derisione di RSpec con tutte queste librerie sarà eccessivo.

Io per primo uso la moka perché non uso rspec. Uso test / unità e test / unità non ha lo stubing e il derisione integrati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top