Ho notato che molte persone preferiscono Mocha su un framework di simulazione mocking di RSpec. Qualcuno può spiegare i vantaggi di Mocha, o di qualsiasi altra alternativa, rispetto a RSpec costruito in una struttura di derisione?Quali sono i vantaggi di Mocha rispetto alla struttura di simulazione integrata di RSpec?
risposta
Una caratteristica specifica che mi piace molto è riuscire a eliminare tutte le istanze di una classe. Un sacco di volte che faccio qualcosa di simile a quanto segue con RSpec prende in giro:
stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)
con la moka che diventa:
Car.any_instance.stubs(:speed).returns(100)
trovo la versione Mocha più chiara ed esplicita.
Io per un uso mocha perché non uso rspec. Io uso test/unità e test/unità non ha il built-in di stub e di simulazione.
[Rspec-mocks] (https://github.com/rspec/rspec-mocks) è ora un progetto indipendente che può essere utilizzato in qualsiasi progetto non Rspec. –
Per quanto ne so, Mocha supporta Double Injection (ovvero Partial Mocking, che è supportato anche in rr), non è sicuro che RSpec supporti anche 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 di RSpec con tutte queste librerie sarà eccessivo.
[Rspec-mocks] (https://github.com/rspec/rspec-mocks) è ora un progetto indipendente che può essere utilizzato in qualsiasi progetto non Rspec. –
Rubino beffardo quadri si sono evoluti molto da questa domanda è stato chiesto nel 2009. Quindi, ecco un po 'di 2.013 confronto:
aspettative
- con RSpec-schernisce:
expect(user).to receive(:say_hello)
- con Mocha:
user.expects(:say_hello).once
stubbing un oggetto
- con RSpec-schernisce:
user = double(name: 'John Doe')
- con la moka:
user = stub(name: 'John Doe')
stubbing nulla
- con RSpec-schernisce:
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 su un altro è una questione di gusto personale (e hanno un sapore abbastanza simile).
Incredibilmente utile avere confronti concreti, +1 –
any_instance è probabilmente il * motivo * per usare Mocha. È incredibilmente potente e può far risparmiare molto tempo. –
Ora puoi farlo con RSpec 2: https: //www.relishapp.it/rspec/rspec-mocks/docs/method-stubs/stub-on-any-instance-of-a-class –
Sì, questa risposta non è aggiornata. È possibile "deselezionarlo"? –