Warum ein spöttisches Framework verwenden, anstatt unsere Mocks von Hand zu rollen?

8

Momentan lese ich ein Buch (Pro ASP.Net Framework).

In diesem Buch schlägt der Autor vor, ein Moq-Framework zu verwenden, um TDD zu erstellen.

%Vor%

In der Modellschicht haben wir ein FakeRepository und ein SqlRepository definiert.

Tatsache ist, dass ich den Vorteil der Verwendung dieses moq-Frameworks nicht sehe. Warum benutzen wir nicht nur unser FakeRepository? Oder löschen Sie unser FakeRepository und fügen Sie gefälschte Produkte hinzu?

Zuerst dachte ich, dass das Moq-Framework da ist, um gefälschte Daten zu generieren, also müssen Sie nicht, wenn Sie zum Beispiel 100 gefälschte Objekte generieren müssen.

Was ich vermisse?

    
Melursus 18.12.2009, 18:48
quelle

5 Antworten

12

Einige Vorteile von Mock-Frameworks gegenüber handgerollten Mocks:

  • Das Scheinverhalten ist näher am Testcode, weil es in der Testcode ist. Dies macht Tests einfacher zu verstehen, ohne auf anderen Code zu schauen.
  • Sie müssen keine weitere Scheinklasse erstellen (oder noch schlimmer: fügen Sie Logik zu einer vorhandenen hinzu), nur weil Sie etwas anderes Verhalten wollen.
  • Am Ende schreiben Sie weniger "bastleplate", weil Sie nur die Methoden festlegen müssen, die Sie nachahmen möchten, während Sie bei handgerollten Methoden die gesamte Schnittstelle implementieren müssen.

Einige Nachteile:

  • Sie müssen einen Rahmen lernen, während jeder Mocks von Hand schreiben kann.
  • Es ist noch eine weitere Abhängigkeit, die Sie Ihrem Projekt hinzufügen.

(Das ist, was ich gerade jetzt denken kann. Fühlen Sie sich frei, mehr zu bearbeiten und hinzuzufügen.)

    
R. Martinho Fernandes 18.12.2009, 19:02
quelle
2

Ein Mocking-Framework befreit Sie von der Last, einzigartige Mock-Objekte zu erstellen, die spezifische Daten für Ihren Testfall zurückgeben. Sie ermöglichen auch zu testen, ob auf bestimmte Methoden oder Eigenschaften zugegriffen wurde oder nicht (durch Konsumenten des Mock-Objekts). Auf diese Weise können Sie bestimmte erwartete Verhaltensweisen leichter testen und somit durchsetzen.

Mock-Frameworks sind nur Werkzeuge. Sicher, Sie könnten es manuell tun, aber Sie könnten Zeit damit verbringen, Klassen zu warten, die nur zum Testen dienen.

Eine ähnliche Frage ist hier verfügbar.

    
Ryan Emerle 18.12.2009 19:03
quelle
-1

Wir verwenden es, um einen gefälschten Server in einer Client / Server-Umgebung zu erstellen.

Auf diese Weise müssen Anrufe nicht den ganzen Weg vom Client zum Server zur DB und wieder zurück gehen. Sie gehen einfach zum Mock-Server, der aufgefordert wird, ein bestimmtes Objekt / einen bestimmten Wert für einen bestimmten Anruf zurückzugeben und zu erwarten, dass bestimmte Anrufe getätigt werden.

    
Chris Doggett 18.12.2009 18:57
quelle
-1
Mit können Sie die eingehende Eingabe steuern, um sicherzustellen, dass die Ausgabe korrekt erfolgt. Sie können beispielsweise Daten, von denen Sie wissen, dass sie fehlerhaft sind, übergeben und dann testen, dass Ihre Methoden diesen Fehler tatsächlich auslösen, und Sie können gültige Daten übergeben und testen, dass die gültigen Daten vom Objekt zurückgegeben werden.

Es gibt mehr Frameworks als nur Moq; Es gibt RhinoMocks und TypeMock (mein persönlicher Favorit, obwohl es Geld kostet, es sei denn, es ist ein Open-Source-Projekt), um ein paar zu nennen.

    
Brian Mains 18.12.2009 19:06
quelle

Tags und Links