Unit-Tests von ASP.NET MVC-Controllern erfordern oft Mocking HttpContext
, um Ihren Code von Webserverabhängigkeiten zu isolieren. Moq, ein leistungsstarkes Mocking-Framework, bietet eine robuste Lösung zur Simulation von HttpContext
und seinen Eigenschaften.
Die Herausforderung:
Direktes Spotten HttpContext
mit Moq stellt eine häufige Gefahr dar:
<code class="language-csharp">[TestMethod] public void Home_Message_Display_Unknown_User_when_cookie_does_not_exist() { var context = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); context .Setup(c => c.Request) .Returns(request.Object); HomeController controller = new HomeController(); // Error: HttpContext is read-only. controller.HttpContext = context.Object; ... }</code>
Der Versuch, ein simuliertes HttpContext
direkt der HttpContext
-Eigenschaft des Controllers zuzuweisen, schlägt fehl, da es schreibgeschützt ist.
Die Lösung:
Der richtige Ansatz besteht darin, stattdessen die Eigenschaft ControllerContext
festzulegen. ControllerContext
erbt von HttpContext
und stellt den erforderlichen Zugriffspunkt bereit:
<code class="language-csharp">controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);</code>
Weiterführende Literatur:
Ausführlichere Informationen zum Spotten HttpContext
und RequestContext
mit Moq finden Sie in diesen Ressourcen:
Das obige ist der detaillierte Inhalt vonWie kann man HttpContext in ASP.NET MVC Unit Tests mit Moq richtig verspotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!