2009-06-28 10 views
0

Ich bin immer noch verwirrt, wenn ich einen Wrapper und eine Schnittstelle machen muss, um meine Tests zu fälschen.Wie kann ich feststellen, wann ich meine eigene Schnittstelle und Wrapper für Komponententests schreiben muss?

Wie in einem Buch, das ich über MVC lese, verwendet der Autor das Moq-Framework.

Der Autor erstellt also zuerst eine IFormAuthentication-Schnittstelle.

Schreibt einige Methoden dort und macht dann eine WrapperClass, die diese Methoden implementiert und dann den eigentlichen Code für die Methoden schreibt (dh signout).

Also dann in Moq verwendet er nur die Schnittstelle. Das macht für mich Sinn, aber korrigiere mich, wenn ich falsch liege.

Er macht das, weil er möchte, dass moq ein gefälschtes Modell mit Hilfe der Schnittstelle macht? Dann hat er in der MVC-Anwendung einen Schritt nach oben gemacht, so dass dann, wenn die Schnittstelle null ist, eine neue Wrapper-Klasse erstellt wird.

Also ich denke, das ist so, wenn es Zeit tatsächlich zu laufen, verwendet die Wrapper, die tatsächlich die echten Methoden enthält, so dass die Anwendung wie es soll funktionieren soll.

Also hoffentlich habe ich das richtig gemacht.

Jetzt macht er weiter die Mitgliedschaft und er sagt so etwas wie "Schau, wie viele Methoden ich mit einer Schnittstelle implementieren müsste (ich rate auch, er würde auch einen Wrapper erstellen)".

Stattdessen werden wir Moq dazu bringen, es zu tun und dann geht er zu Moq MembershipProvider und es schafft all diese Sachen.

Also meine Fragen ist, woher wusste er? Wie ist es auf der einen Seite können Sie FormsAuthentication-Methoden auf diese Weise nicht tun, aber Sie können den MembershipProvider tun?

Ich glaube nicht einmal, dass Sie tun können Wie nur Mitgliedschaft muss es MembershipProvider sein.

Woher bekomme ich diese Informationen? Wie möchte ich mein SMTP (MailMessage) tun und ich möchte wissen, ob ich eine Schnittstelle und dann einen Wrapper schreiben muss oder kann ich das gleiche tun wie MembershipProvider?

Ich bin mir nicht sicher, ich weiß nicht, wie ich es sagen soll.

Dank

+0

Der neue Account funktioniert, ich bin froh zu sehen. Entschuldigung, wir konnten nicht mehr von den alten Fragen übertragen. –

+0

Hier gibt es eine Menge Fragen: versuchen Sie, die Frage zu vereinfachen und auf etwas klarer zu stellen –

Antwort

0

Der Grund, warum der Autor nicht eine Schnittstelle extrahieren hat für MembershipProvider ist, weil es bereits eine abstrakte Klasse ist, so dient sie hervorragend als Testdoppel bereits.

Mit anderen Worten: Das Extrahieren einer Schnittstelle ist nur erforderlich, wenn Sie eine Klasse abstrahieren möchten, die sich außerhalb Ihrer Kontrolle befindet. In diesem Fall können Sie dann einen Adapter erstellen, der die reale Implementierung umschließt, während Sie weiterhin die Möglichkeit haben, die echte Implementierung durch einen Test-Double zu ersetzen.

Wenn es um Abstraktionen geht, sind Schnittstellen und Basisklassen mit virtuellen Membern konzeptionell gleichwertig.

Sie können mehr über Test-Doppel in der ausgezeichneten xUnit Test Patterns lesen.

Verwandte Themen