2009-09-10 3 views

risposta

30

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.

+1

any_instance è probabilmente il * motivo * per usare Mocha. È incredibilmente potente e può far risparmiare molto tempo. –

+19

Ora puoi farlo con RSpec 2: https: //www.relishapp.it/rspec/rspec-mocks/docs/method-stubs/stub-on-any-instance-of-a-class –

+3

Sì, questa risposta non è aggiornata. È possibile "deselezionarlo"? –

3

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.

+1

[Rspec-mocks] (https://github.com/rspec/rspec-mocks) è ora un progetto indipendente che può essere utilizzato in qualsiasi progetto non Rspec. –

4

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.

+1

[Rspec-mocks] (https://github.com/rspec/rspec-mocks) è ora un progetto indipendente che può essere utilizzato in qualsiasi progetto non Rspec. –

36

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).

+1

Incredibilmente utile avere confronti concreti, +1 –