Maison >développement back-end >C++ >Comment simuler efficacement HttpContext dans ASP.NET MVC avec Moq ?

Comment simuler efficacement HttpContext dans ASP.NET MVC avec Moq ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-11 20:51:43182parcourir

How to Effectively Mock HttpContext in ASP.NET MVC with 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn