Maison >développement back-end >C++ >Comment simuler efficacement HttpContext dans ASP.NET MVC avec Moq ?
Se moquer de HttpContext dans ASP.NET MVC à l'aide de Moq : un guide pratique
Lors des tests unitaires des contrôleurs ASP.NET MVC avec Moq, la simulation HttpContext
présente un défi en raison de sa nature en lecture seule. Tenter d'attribuer directement un HttpContext
simulé à la propriété HttpContext
d'un contrôleur entraîne une erreur, comme le montre cet exemple :
<code class="language-csharp">[TestMethod] public void Home_Message_Display_Unknown_User_when_coockie_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(); controller.HttpContext = context.Object; // Error: Read-only property }</code>
La solution réside dans la manipulation du ControllerContext
à la place. Cette approche permet d'accéder au HttpContext
sous-jacent sans violer la contrainte de lecture seule. Voici comment :
<code class="language-csharp">controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);</code>
Une autre méthode efficace consiste à remplacer la méthode Initialize
dans votre contrôleur de base. Cela vous permet d'injecter le HttpContext
moqué dans le RequestContext
:
<code class="language-csharp">protected override void Initialize(RequestContext requestContext) { base.Initialize(requestContext); requestContext.HttpContext = context.Object; }</code>
Pour obtenir des conseils complets sur la simulation de HttpRequestBase
et HttpContext
à l'aide de Moq, reportez-vous à la documentation Microsoft suivante :
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!