Frage

Ich habe gerade das lustig gesehen YouTube -Video über Unit -Tests (Es ist Hitler mit gefälschten Untertiteln, die sein Team auskauert, weil er keine guten Unit-Tests durchgeführt hat-schütteln Sie es, wenn Sie Humor beeinträchtigen), bei denen Stubs rundum kritisiert werden. Aber ich verstehe nicht, was mit Stubs falsch ist.

Ich habe noch nicht angefangen, ein spöttisches Rahmen zu verwenden, und ich habe nicht angefangen, den Schmerz nicht zu spüren, wenn ich keine benutzte.

Bin ich irgendwann in einer Welt, die irgendwann verletzt ist? Nachdem Sie handgeschriebene Stubs und Fälschungen statt nach Mocks (wie Rhinomock usw.) ausgewählt haben? (Verwendung von Fowlers Taxonomie)

Was sind die Überlegungen zur Auswahl zwischen einem Schein und einem handgeschriebenen Stub?

War es hilfreich?

Lösung

An Stubs ist nichts auszusetzen, es gibt Platz für Stubs, Mocks ... und Spione. Alle sind "Test -Doppel", aber mit unterschiedlichen Zwecken, wie er erläutert wird Mocks und Stubs sind keine Spione:

...] Bevor ich weitermachen würde, möchte ich einige Begriffe hier klarstellen und definieren, die ich ursprünglich in Gerard Meszaros entdeckt habe. Xunit Muster Buch.

  • Ein Dummy -Objekt ist ein Platzhalterobjekt, das an das zu testende System übergeben, aber nie verwendet wird.
  • Ein Teststub liefert das untersuchte System mit indirekten Eingaben
  • Ein Testspion bietet eine Möglichkeit, zu überprüfen
  • Ein Scheinobjekt liefert das untersuchte System sowohl mit indirekten Eingaben als auch eine Möglichkeit, den indirekten Ausgang zu überprüfen

...] Und Sie können diesen praktischen Diagramm Ihre Entscheidungen leiten lassen:

alt text

PS: Mockito - das neue Mock -Framework auf dem Block ist auch die Lektüre wert.

Andere Tipps

Ich verwende die folgende Terminologie (eingeführt von Roy Osherove, dem Autor der Art of Unit-Testing):

EIN gefälscht wird als a genannt Stummel Wenn Sie es sagen, etwas zu fälschen, falls eine Methode mit solchen und solchen Parametern aufgerufen wird. Wenn Sie jedoch auch überprüfen, ob ein solcher Anruf tatsächlich stattgefunden hat oder genau nimon spotten. Zusamenfassend. Eine Fälschung ist ein Stub, es sei denn, Sie rufen verify () darauf an und dann ist es ein Schein.

Offensichtlich müssen Sie in einigen Fällen Stubs verwenden und in anderen verspotten. Das Kritisieren von Stubs ist also wahrscheinlich falsch und es ist wahrscheinlich auch falsch, Stubs zu verwenden.

Wenn Sie noch nicht begonnen haben, einen spöttischen Framework zu verwenden (alternativer Begriff: Isolationsrahmen), Sie sollten sie im Auge behalten und Ihre Optionen häufig neu bewerten. Ich ging sehr schnell von manuellen Mocks nach Nmock2 nach MOQ. Hier ist eine interessante Umfrage von Programmierern, die zeigen, was sie verwenden. Manuelle Mocks/Stubs sind in der Minderheit, sind aber nicht so ungewöhnlich.

Mocks sind nur viel einfacher einzuwerfen. Sie sind eine echte Instanz Ihrer Klasse, die mit der Fähigkeit, die Aktion einer Methode mit minimalem Kesselplatten zu überschreiben, vorgezogen wird.

Es gibt viele kleine Überlegungen wie: Wenn Sie sich nicht mit einer der Methoden befassen möchten, können Sie es entweder als No-op oder den Test nicht bestehen-Ihre Wahl-aber so oder so praktisch kein Code .

Wie viel Kesselplatte erhalten Sie, wenn Sie eine Klasse ausstechen? Wie gehen Sie damit um, wenn Ihre Klasse endgültig ist? Spielen Sie Tricks, um zuerst Ihren Stub auf den Klassenpfad zu bringen, oder verwenden Sie eine andere Quelle?

Ich empfehle nur mit den Mocks-es ist rundum einfacher.

Es ist nichts Falsches daran, Stubs anstelle von Mocks zu verwenden.

Wenn Sie technisch werden möchten, sind Mocks "intelligente" Objekte mit Erwartungen, die überprüft werden können. Stubs sind Dummy -Objekte, die voreingestellte Werte zurückgeben. Sehen Mocks sind keine Stummel.

Aber viele Menschen (ich habe eingeschlossen) lieber staatliche Tests mit Stubs und nicht mit Verhaltenstests mit Mocks durchführen. Sie injizieren einen Stub in die untersuchte Klasse, Sie rufen eine Methode auf, dann überprüfen Sie den Status der untersuchten Klasse. Es neigt dazu, weniger spröde Tests zu ermöglichen, als zu behaupten, dass die Interna der Klasse Methode X eines Scheinobjekts mit Argument Y.

Ich glaube nicht, dass Sie eine Welt des Verletzten haben. Wenn Sie den Schmerz nicht angefangen haben, brauchen Sie wahrscheinlich noch keine Isolations-/Verspottungsgerüst. Wann und wenn Sie es tun, wird es nichts schaden, handgeschriebene Stubs/Fälschungen zu haben.

Wenn Sie viele Schnittstellen haben oder wenn Ihre Schnittstellen viele Methoden haben, kann ein Isolations-/Verspottungsgerüst viel Zeit über handkodierende Stubs sparen.

Ich mag MOQ viel; Ich finde es einfacher zu bedienen als Rhino -Mocks zum Erstellen von Stubs.

Mocks und Stubs werden verwendet, um einen realen Unit -Test zu erreichen. Sie verspotten nur alle Abhängigkeiten und testen Ihre Klasse isoliert.

Ich benutze gerade MOQ zum Verspotten und Stummeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top