Maison >développement back-end >C++ >Comment puis-je me moquer de HttpContext.Current pour des tests unitaires ASP.NET MVC efficaces ?

Comment puis-je me moquer de HttpContext.Current pour des tests unitaires ASP.NET MVC efficaces ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-17 03:01:09378parcourir

How Can I Mock HttpContext.Current for Effective ASP.NET MVC Unit Testing?

Mock HttpContext.Current dans les tests unitaires

Lors du test unitaire d'une application ASP.NET MVC, vous devez vous moquer du HttpContext.Current renvoyé par l'appel d'attribut HttpContext.Current. Cette propriété renvoie une instance de System.Web.HttpContext qui n'étend pas System.Web.HttpContextBase (la classe utilisée pour se moquer).

HttpContext.Current et HttpContextBase

L'introduction de HttpContextBase vise à résoudre le problème qui HttpContext est difficile à simuler. Cependant, il n'y a aucune relation entre ces deux classes, HttpContextWrapper sert d'adaptateur entre elles.

Mock HttpContext pour un accès partagé

Pour simuler HttpContext afin qu'il soit partagé entre le contrôleur et toute bibliothèque appelée dans la méthode TestInitialize, vous pouvez utiliser le code suivant :

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

Définir le principal utilisateur

Pour configurer un utilisateur connecté, utilisez le code suivant :

<code class="language-csharp">HttpContext.Current.User = new GenericPrincipal(
    new GenericIdentity("username"),
    new string[0]
    );</code>

Définir l'utilisateur comme non connecté

Pour usurper l'identité d'un utilisateur non authentifié, utilisez :

<code class="language-csharp">HttpContext.Current.User = new GenericPrincipal(
    new GenericIdentity(String.Empty),
    new string[0]
    );</code>

En modifiant HttpContext.Current de cette manière, il peut être simulé tout au long de la configuration de test, garantissant un comportement cohérent du contrôleur et de toutes les bibliothèques dépendantes.

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