Heim >Backend-Entwicklung >C++ >Wie verspotte ich HttpContext.Current in der Basisklasseninitialisierung für ASP.NET MVC-Komponententests?

Wie verspotte ich HttpContext.Current in der Basisklasseninitialisierung für ASP.NET MVC-Komponententests?

Susan Sarandon
Susan SarandonOriginal
2025-01-17 02:56:11333Durchsuche

How to Mock HttpContext.Current in Base Class Initialization for ASP.NET MVC Unit Tests?

Adressierung von HttpContext.Current Mocking in der Basisklasseninitialisierung für ASP.NET MVC-Komponententests

Unit-Tests von ASP.NET MVC-Anwendungen erfordern oft Mocking HttpContext.Current, um Benutzeranfragen und -antworten zu simulieren. Ein häufiges Problem entsteht, wenn eine Testklasse von einer Basisklasse erbt, die bei ihrer Initialisierung HttpContext.Current verwendet. Es reicht nicht aus, einfach den Kontext für den Controller selbst zu verspotten.

Das bereitgestellte Beispiel zeigt, wie HttpContext für den Controller mithilfe von FakeControllerContext und SetFakeControllerContext verspottet wird. Wenn jedoch die Init-Methode der Basisklasse auf HttpContext.Current zugreift, muss dies direkt behoben werden. Um eine konsistente Verspottung sicherzustellen, müssen wir auch HttpContext.Current innerhalb der Testinitialisierung verspotten.

Verspotten HttpContext.CurrentEffektiv

Wir können die Klasse System.Web.HttpContext effektiv verspotten, indem wir ihre Eigenschaften IPrincipal und IIdentity ersetzen. Der folgende Codeausschnitt veranschaulicht dies:

<code class="language-csharp">HttpContext.Current = new HttpContext(
    new HttpRequest("", "http://tempuri.org", ""),
    new HttpResponse(new StringWriter())
);

// Simulate a logged-in user
HttpContext.Current.User = new GenericPrincipal(
    new GenericIdentity("username"),
    new string[0]
);

// Simulate a logged-out user
HttpContext.Current.User = new GenericPrincipal(
    new GenericIdentity(String.Empty),
    new string[0]
);</code>

Durch die Implementierung dieser Verspottungsstrategie innerhalb der Initialisierungsmethode des Tests vor dem Aufruf der Init-Methode der Basisklasse stellen wir sicher, dass HttpContext.Current korrekt verspottet wird, sodass der Test Benutzerinteraktionen genau simulieren und bei Bedarf auf HttpContext zugreifen kann . Dieser Ansatz garantiert ein konsistentes Verhalten sowohl im Controller als auch in der Basisklasse während der Testausführung.

Das obige ist der detaillierte Inhalt vonWie verspotte ich HttpContext.Current in der Basisklasseninitialisierung für ASP.NET MVC-Komponententests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn