Maison >développement back-end >C++ >Comment se moquer de HttpContext.Current dans l'initialisation de la classe de base pour les tests unitaires ASP.NET MVC ?

Comment se moquer de HttpContext.Current dans l'initialisation de la classe de base pour les tests unitaires ASP.NET MVC ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-17 02:56:11337parcourir

How to Mock HttpContext.Current in Base Class Initialization for ASP.NET MVC Unit Tests?

Résolution de HttpContext.Current Mocking dans l'initialisation de la classe de base pour les tests unitaires ASP.NET MVC

Les tests unitaires des applications ASP.NET MVC nécessitent souvent des simulations HttpContext.Current pour simuler les demandes et les réponses des utilisateurs. Un problème courant survient lorsqu'une classe de test hérite d'une classe de base qui utilise HttpContext.Current dans son initialisation. Se moquer simplement du contexte du contrôleur lui-même ne suffit pas.

L'exemple fourni montre la simulation de HttpContext pour le contrôleur en utilisant FakeControllerContext et SetFakeControllerContext. Cependant, si la méthode Init de la classe de base accède à HttpContext.Current, cela doit être résolu directement. Pour garantir une moquerie cohérente, nous devons également nous moquer HttpContext.Current lors de l'initialisation du test.

Se moquer HttpContext.Current Efficacement

Nous pouvons effectivement nous moquer de la classe System.Web.HttpContext en remplaçant ses propriétés IPrincipal et IIdentity. L'extrait de code suivant illustre ceci :

<code class="language-csharp">HttpContext.Current = new HttpContext(
    new HttpRequest("", "http://tempuri.org", ""),
    new HttpResponse(new StringWriter())
);

// Simulate a logged-in user
HttpContext.Current.User = new GenericPrincipal(
    new GenericIdentity("username"),
    new string[0]
);

// Simulate a logged-out user
HttpContext.Current.User = new GenericPrincipal(
    new GenericIdentity(String.Empty),
    new string[0]
);</code>

En implémentant cette stratégie de simulation dans la méthode d'initialisation du test, avant d'appeler la méthode Init de la classe de base, nous nous assurons que HttpContext.Current est correctement simulé, permettant au test de simuler avec précision les interactions des utilisateurs et d'accéder au HttpContext selon les besoins . Cette approche garantit un comportement cohérent à la fois sur le contrôleur et sur la classe de base pendant l'exécution du test.

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