Ich habe verschiedene Artikel über Mocking vs Stubbing in Tests gelesen, einschließlich Martin Fowlers Spötteleien sind keine Spötteleien aber ich verstehe den Unterschied immer noch nicht.
Antworten
Zu viele Anzeigen?Nach der Lektüre all der obigen Ausführungen möchte ich versuchen, mich kurz zu fassen:
- Stummel : ein Dummy-Code, der den Test ablaufen lässt, aber es ist Ihnen egal, was mit ihm passiert.
- Mock : ein Dummy-Code, von dem Sie als Teil des Tests VERIFIZIEREN, dass er korrekt aufgerufen wird.
- Spionage : ein Dummy-Code, der einige Aufrufe eines echten Codes abfängt, so dass Sie die Aufrufe überprüfen können, ohne das gesamte Originalobjekt zu ersetzen.
Ich denke, die einfachste und klarste Antwort auf diese Frage wird gegeben von Roy Osherove in seinem Buch Die Kunst des Unit-Tests (Seite 85)
Der einfachste Weg, um zu erkennen, dass es sich um einen Stub handelt, ist die Tatsache, dass der Stub den Test niemals nicht bestehen kann. Die Asserts, die der Test verwendet, richten sich immer gegen die getestete Klasse.
Andererseits wird der Test ein Mock-Objekt verwenden, um zu überprüfen, ob die Test fehlgeschlagen ist oder nicht. [...]
Auch hier ist das Mock-Objekt das Objekt, das wir verwenden, um zu sehen, ob der Test fehlgeschlagen ist oder nicht.
Stub und Mock sind beide gefälscht.
Wenn Sie Behauptungen gegen die Fälschung machen, bedeutet dies, dass Sie die Fälschung als Mock verwenden, wenn Sie die Fälschung nur verwenden, um den Test ohne Behauptung über sie laufen zu lassen, verwenden Sie die Fälschung als Stub.