Les tests unitaires des contrôleurs ASP.NET MVC nécessitent souvent une simulation HttpContext
pour isoler votre code des dépendances du serveur Web. Moq, un puissant framework de simulation, fournit une solution robuste pour simuler HttpContext
et ses propriétés.
Le défi :
Se moquer directement de HttpContext
avec Moq présente un piège courant :
<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>
La tentative d'attribuer un HttpContext
simulé directement à la propriété HttpContext
du contrôleur échoue car elle est en lecture seule.
La solution :
L'approche correcte consiste à définir la propriété ControllerContext
à la place. ControllerContext
hérite de HttpContext
, fournissant le point d'accès nécessaire :
<code class="language-csharp">controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);</code>
Lectures complémentaires :
Pour des informations plus détaillées sur le mocking HttpContext
et RequestContext
avec Moq, consultez ces ressources :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!