HttpContext.Current Mocking in ASP.NET MVC Unit Tests beherrschen
Effektive Unit-Tests in ASP.NET MVC erfordern die Isolierung des Controller- und Bibliotheksverhaltens und eine genaue Simulation des HttpContext
-Objekts. Dieser Artikel befasst sich mit der Herausforderung, HttpContext.Current
innerhalb einer Testinitialisierungsmethode zu verspotten.
Traditionelle Methoden, wie der Einsatz von Hilfsklassen wie FakeControllerContext
, richten ein Schein-HttpContext
für den Controller ein. Dieser Ansatz greift jedoch oft zu kurz, da er die Reichweite des Mocks nicht auf die Init
-Methode ausdehnt, auf die möglicherweise auch externe Bibliotheken auf HttpContext.Current
.
Die optimale Lösung manipuliert HttpContext.Current
direkt und ersetzt die Objekte IPrincipal
und IIdentity
. Dadurch wird ein konsistentes Mocking über den gesamten Controller und alle während der Init
-Methode aufgerufenen Bibliotheken sichergestellt, sogar innerhalb von Konsolenanwendungen. 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>
Diese direkte Manipulation bietet umfassende Kontrolle über die Testumgebung und ermöglicht robustere und effektivere Unit-Tests durch genaue Simulation der HttpContext
.
Das obige ist der detaillierte Inhalt vonWie kann man HttpContext.Current in ASP.NET MVC-Komponententests effektiv verspotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!