2009-09-10 10 views

Antwort

30

Ein besonderes Merkmal, das ich wirklich mag, ist in der Lage, alle Instanzen einer Klasse auszuschließen. Viele Male habe ich mit RSpec etwas wie das folgende tun spottet:

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

mit Mokka, der wird:

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

Ich finde die Mocha Version klarer und deutlicher.

+1

any_instance ist wahrscheinlich * der Grund, Mocha zu verwenden. Es ist unglaublich leistungsstark und kann viel Zeit sparen. –

+19

Sie können dies jetzt mit RSpec 2 tun: https: //www.relisapp.com/rspec/rspec-mocks/docs/stub-on-any-instance-of-a-class –

+3

Ja, diese Antwort ist veraltet. Ist es möglich, es zu deaktivieren? –

3

Ich für eine Verwendung Mokka, weil ich rspec nicht verwende. Ich benutze Test/Einheit, und Test/Einheit hat keine Stubbing und Mocking eingebaut.

+1

[Rspec-mocks] (https://github.com/rspec/rspec-mocks) ist jetzt ein unabhängiges Projekt, das in jedem beliebigen Nicht-Rspec-Projekt verwendet werden kann. –

4

Soweit ich weiß, unterstützt Mocha Double Injections (alias Partial Mocking, das auch in rr unterstützt wird), nicht sicher, ob RSpec diese Funktion auch unterstützt.

Auch für diejenigen, die zwischen Test-Frameworks wechseln möchten, ist Mocha eine universelle Lösung für Test/Unit, Shoulda, etc. RSpec Spott mit all diesen Bibliotheken wird ein Overkill sein.

+1

[Rspec-mocks] (https://github.com/rspec/rspec-mocks) ist jetzt ein unabhängiges Projekt, das in jedem Nicht-Rspec-Projekt verwendet werden kann. –

36

Ruby-spöttischen Frameworks viel entwickelt haben, da diese Frage im Jahr 2009 hier gefragt wurde, so ist ein wenig 2013 Vergleich:

Erwartungen

  • mit Rspec-Mocks: expect(user).to receive(:say_hello)
  • mit Mokka: user.expects(:say_hello).once

Stubbing ein Objekt

  • mit Rspec-Mocks: user = double(name: 'John Doe')
  • mit Mokka: user = stub(name: 'John Doe')

Stubbing alles

  • mit Rspec-Mocks: User.any_instance.stub(:name).and_return('John Doe')
  • mit Mokka: User.any_instance.stubs(:name).returns('John Doe')

Sie bieten die gleichen Einrichtungen, und beide können mit oder ohne Rspec verwendet werden.
Also würde ich sagen, eine über die andere zu wählen, ist eine Frage des persönlichen Geschmacks (und sie schmecken ziemlich ähnlich).

+1

Unglaublich nützlich, um einige konkrete Vergleiche zu haben, +1 –

Verwandte Themen