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

Comment simuler correctement HttpContext dans les tests unitaires ASP.NET MVC avec Moq ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-11 20:46:15323parcourir

How to Properly Mock HttpContext in ASP.NET MVC Unit Tests with Moq?

Se moquer de HttpContext dans les tests unitaires ASP.NET MVC avec Moq

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!

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