Frage

Ich habe diese Zeilen lesen: http://martinfowler.com/articles/mocksArentStubs.html Meine Konzepte über einen Stub und ein Mock sind klar. Ich verstehe die Notwendigkeit der Isolation Frameworks wie moq, RhinoMocks und wie ein Mock-Objekt zu erstellen. Als Mocks, die Teilnahme an tatsächlichen Verifizierung der Erwartungen. Aber warum müssen wir diese Frameworks Stubs erstellen. Ich würde lieber lieber eine Hand erstellt Stub Ausrollen und es in verschiedenen Vorrichtungen verwendet werden.

War es hilfreich?

Lösung

Haben Sie versucht, für einen Tag eine Bibliothek wie Rhino Mocks verwenden oder zwei vor, dass die handgerollte Stubs Entscheidung eine bessere Option?

@chibacity: Die ganze Idee über spöttische Bibliotheken ist auf vermeiden Implementierungen. Wenn ich nur eine einzige Eigenschaft Wert festlegen muß, will ich nicht eine ganze Implementierung einer Schnittstelle erstellen. Telefonvorwahl wie

MyObj obj = MockRepository.GenerateStub<MyObj>();
obj.MyProperty = 33;

scheint mir viel einfacher. Nicht Situationen zu erwähnen, wo ich nur einen stummen Stummel brauchen als Parameter übergeben werden, in denen ich interessiert nicht, was mit ihm geschieht (also keine eingerichtet ist erforderlich).

Dies bedeutet nicht, sollten Sie Ihre eigenen Stubs für komplexere Szenarien nicht ausrollen, aber nach meiner Erfahrung solche Fälle sind selten.

Meine Empfehlung zu lernen, wie man eine gute spöttische Bibliothek verwenden (wie Rhino) mit allen seinen kleinen Tricks, meine Wette ist, dass Sie bald die Gründe für seine Existenz zu schätzen wissen werden lernen.

Andere Tipps

Genau genommen, nein, Sie nicht Notwendigkeit ein Isolationsrahmen Stubs zu erstellen. In der Tat hat Microsoft auch ein Stubs Rahmen dass nur generiert Stubs, nicht verspottet.

Ich habe noch nie einen Isolationsrahmen selbst geschrieben, aber es scheint, dass es, wenn Sie Objekt spöttisch an der richtigen Stelle, würde Stubs ein Kinderspiel zu schaffen. Das könnte der Hauptgrund sein, dass die meisten / alle Isolationsrahmen Stub-Objekte enthalten.

In Bezug auf Ihren letzten Satz ( „Ich würde lieber lieber eine Hand erstellt Stub Ausrollen und verwenden Sie sie in verschiedenen Vorrichtungen“), haben Sie tatsächlich versuchen, dass auf jedem größeres Projekt? Sicher, vielleicht haben Sie eine Schnittstelle mit einer einzigen Methode, dass die Renditen eines Nullable-Bool -. Sie nur für diese Schnittstelle drei Stubs zu schreiben, und das ist nicht so schlimm

Aber sobald Sie beginnen, in Dutzende von Schnittstellen und Klassen Stummel, wird es einfach ein Chaos den Überblick über all die verschiedenen Stubs zu halten. Wenn Sie jeden Stummel in mehreren Tests verwenden, können Sie sicherlich rechtfertigen Handschrift einen Stub und legt es beiseite; aber wenn man nur einen bestimmten Stub verwenden ein- oder zweimal, es viel einfacher ist es zu halten, als „anonymous“ Stummel direkt durch den Rahmen erzeugt, der Einfachheit halber.

Nach der Verwendung von spöttischen Rahmen für eine Weile habe ich festgestellt, dass mein Code-Design auf einer ganz andere Schräge nimmt. Diese Neigung scheint in einem Interaktionsstil gerichtet werden. Mit anderen Worten, würde ich mehr Interesse an Nachrichten und Verhalten als Zustand. Meine Objekte werden Dienste statt Stateful Objekte als passieren würde, wenn Stubs verwenden. Mit Stubs am Ende ich Zustand vorbei um auf andere Objekte.

Das Problem für mich wird dann mehr Abstraktionsschichten zu schaffen. Ich muss Frage, wohin etwas auf bestimmten Ebenen interagieren sollen. Dies hilft mit, dass die ‚Last verantwortlich Moment‘ zu schaffen. So habe ich am Ende mit Objekten auf, die Produzenten und Konsumenten haben. Und alles, was dazwischen ist nur Nachrichtenkanäle.

Ich hoffe, das hilft.

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