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!