Heim >Backend-Entwicklung >C++ >Wie kann ich HttpContext.Current für effektive ASP.NET MVC-Einheitentests verspotten?
Mock HttpContext.Current in Unit-Tests
Beim Komponententest einer ASP.NET MVC-Anwendung müssen Sie das vom HttpContext.Current
-Attributaufruf zurückgegebene HttpContext.Current
verspotten. Diese Eigenschaft gibt eine Instanz von System.Web.HttpContext
zurück, die System.Web.HttpContextBase
(die zum Verspotten verwendete Klasse) nicht erweitert.
HttpContext.Current und HttpContextBase
Die Einführung von HttpContextBase
soll das Problem lösen, das HttpContext
schwer zu simulieren ist. Es besteht jedoch keine Beziehung zwischen diesen beiden Klassen, HttpContextWrapper
wird als Adapter zwischen ihnen verwendet.
Mock HttpContext für gemeinsamen Zugriff
Um HttpContext
so zu simulieren, dass es zwischen dem Controller und jeder in der TestInitialize
-Methode aufgerufenen Bibliothek gemeinsam genutzt wird, können Sie den folgenden Code verwenden:
<code class="language-csharp">HttpContext.Current = new HttpContext( new HttpRequest("", "http://tempuri.org", ""), new HttpResponse(new StringWriter()) );</code>
Benutzerprinzipal festlegen
Um einen angemeldeten Benutzer einzurichten, verwenden Sie den folgenden Code:
<code class="language-csharp">HttpContext.Current.User = new GenericPrincipal( new GenericIdentity("username"), new string[0] );</code>
Benutzer als nicht angemeldet festlegen
Um sich als nicht authentifizierter Benutzer auszugeben, verwenden Sie:
<code class="language-csharp">HttpContext.Current.User = new GenericPrincipal( new GenericIdentity(String.Empty), new string[0] );</code>
Durch die Änderung HttpContext.Current
auf diese Weise kann es im gesamten Testaufbau simuliert werden, wodurch ein konsistentes Verhalten des Controllers und aller abhängigen Bibliotheken sichergestellt wird.
Das obige ist der detaillierte Inhalt vonWie kann ich HttpContext.Current für effektive ASP.NET MVC-Einheitentests verspotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!