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
Libérer: 2025-01-11 20:51:43
original
205 Les gens l'ont consulté

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 :

[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
}
Copier après la connexion

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 :

controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
Copier après la connexion

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 :

protected override void Initialize(RequestContext requestContext)
{
    base.Initialize(requestContext);
    requestContext.HttpContext = context.Object;
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal