Unterschied zwischen HttpContext und HttpContextWrapper in Bezug auf Unit-Tests und in Bezug auf Web Forms und MVC
Kenne ich den Unterschied zwischen HttpContext
und HttpContextWrapper
ist unten...
HttpContext
Dies ist die vintage asp.net Kontext. Das problem mit diesem ist, dass es keine Basisklasse und nicht die virtuellen, und ist daher unbrauchbar für die Prüfung (nicht Modell es). Es wird empfohlen, nicht geben Sie es herum, als Funktion Argumente, anstatt vorbei um Variablen des Typs HttpContextBase.
HttpContextBase
Dies ist das (c# 3.5) Ersatz zu HttpContext. Seitdem es ist Abstrakt, es ist jetzt mockable. Die Idee ist, dass Sie Ihre Funktionen, die erwarten, übergeben werden, einen Rahmen zu erwarten hat, erhalten eine von diesen. Es wird konkret umgesetzt, indem HttpContextWrapper
HttpContextWrapper
Ebenfalls neu in C# 3.5 - dies ist die konkrete Umsetzung von HttpContextBase. Zu erstellen, diese in eine normale Webseite zu, verwenden Sie neue HttpContextWrapper(HttpContext.Strom).
Die Idee ist, dass, um Ihren code unit-testbar, deklarieren Sie alle Variablen und Parameter der Funktion vom Typ HttpContextBase, und verwenden Sie ein IOC-framework z.B. Schloss Windsor, um es zu bekommen injiziert. Im normalen code, Burg ist zu injizieren das äquivalent von " neuen HttpContextWrapper
(HttpContext.Strom)', in der Erwägung, dass in der test-code, den Sie sind, gegeben werden ein mock HttpContextBase.
Aber ich bin mir nicht bewusst über die wahre Verwendung. Ich habe gehört, dass es nützlich, in Unit-Tests im Vergleich mit Web-Formularen. aber wie ist es nützlich ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehmen wir ein Beispiel für eine ASP.NET MVC-controller-Aktion, die um ein cookie zu der Antwort:
Beachten Sie die Response-Eigenschaft mehr gibt. Es ist ein
HttpResponseBase
. So können wir verspotten es in einem unit-test:und jetzt könnten wir schreiben unit Tests:
Und da alle Mitglieder sind virtuelle, könnten wir ein mocking-framework, die vermeiden wollen, dass uns das schreiben zu müssen-diejenigen, die mock-Klassen für das unit testen. Zum Beispiel mit NSubstitute hier ist, wie der test Aussehen könnte:
Lassen Sie uns jetzt ist nehmen Sie ein Webformular:
In diesem Fall die Antwort-Eigenschaft ist die konkrete
HttpResponse
. So sind Sie kaputt. Unmöglich unit-Tests in isolation.httpresponse
undhttpresponsebase
. Beide haben die gleiche Anzahl an Eigenschaften und Methode. So besteht kein Unterschied zwischen Ihnen. richtig ?