Ich stelle fest, dass viele Leute Mocha gegenüber RSpecs Mocking Framework bevorzugen. Kann jemand die Vorteile von Mocha oder irgendeiner Alternative gegenüber RSpecs, die in einem spöttischen Rahmen gebaut sind, erklären?Was sind die Vorteile von Mocha gegenüber dem eingebauten Mocking Framework von RSpec?
Antwort
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.
Ich für eine Verwendung Mokka, weil ich rspec nicht verwende. Ich benutze Test/Einheit, und Test/Einheit hat keine Stubbing und Mocking eingebaut.
[Rspec-mocks] (https://github.com/rspec/rspec-mocks) ist jetzt ein unabhängiges Projekt, das in jedem beliebigen Nicht-Rspec-Projekt verwendet werden kann. –
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.
[Rspec-mocks] (https://github.com/rspec/rspec-mocks) ist jetzt ein unabhängiges Projekt, das in jedem Nicht-Rspec-Projekt verwendet werden kann. –
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).
Unglaublich nützlich, um einige konkrete Vergleiche zu haben, +1 –
- 1. Was sind die Vor- und Nachteile von Rspec Mocking im Vergleich zu anderen Mocking Frameworks?
- 2. Was sind die Vorteile von QAbstractItemModel gegenüber QStandardItemModel?
- 3. Was sind die Vorteile von Google Fonts gegenüber Cufon?
- 4. Was sind die Vorteile von Bytecode gegenüber nativem Code?
- 5. Was sind die Vorteile von concurrent.futures gegenüber Multiprocessing in Python?
- 6. Mocking mit rspec und Mocha zusammen
- 7. Was sind die Vorteile von VistaDB
- 8. Vorteile von MySQL gegenüber MySQL
- 9. Was sind die Vorteile eines Powershell-Skripts gegenüber einer Konsolenanwendung?
- 10. Vorteile von MemoryPoolMXBean.getUsage() gegenüber Runtime.freeMemory()
- 11. Was sind die Vorteile von "Staircase" Branching?
- 12. Vorteile von Parcelable gegenüber JSON
- 13. Was sind die Vorteile von Auto-Mapper?
- 14. Was sind die Vorteile von Conduit-Resten?
- 15. Was sind die Vorteile von Subversion?
- 16. Was sind die Vorteile von Lazy Evaluation?
- 17. Was sind die Vorteile von Java?
- 18. Was sind die Vorteile von Ressourcendateien (.resx)?
- 19. Was sind die Vorteile von Asynchronous HTTP
- 20. Was sind die größten Vorteile von LLVM?
- 21. Was sind die Vorteile von NSBinaryStoreType?
- 22. Was sind die Vorteile von Inline-Javascript?
- 23. Was sind die Vorteile von Persistenz Ignoranz?
- 24. Was sind die Vorteile/Vorteile der Verwendung von Python 3?
- 25. Was sind die Vorteile bei der Verwendung von Qt?
- 26. Was sind die Vorteile der Kotlin Programmiersprache?
- 27. Was sind Vorteile einer Twitter-Zukunft gegenüber einer Scala-Zukunft?
- 28. Was sind die Vorteile von VS2008 gegenüber VS2005 für C++ - Entwicklung?
- 29. Was sind die Vorteile von MVC gegenüber 3-Layer-Architektur in Web-Anwendungen?
- 30. Was sind die Vorteile von "Stateless Function Components" gegenüber "ES6 Class Components"?
any_instance ist wahrscheinlich * der Grund, Mocha zu verwenden. Es ist unglaublich leistungsstark und kann viel Zeit sparen. –
Sie können dies jetzt mit RSpec 2 tun: https: //www.relisapp.com/rspec/rspec-mocks/docs/stub-on-any-instance-of-a-class –
Ja, diese Antwort ist veraltet. Ist es möglich, es zu deaktivieren? –