Maison > développement back-end > C++ > Comment se moquer de HttpContext.Current.Session pour les tests unitaires ?

Comment se moquer de HttpContext.Current.Session pour les tests unitaires ?

Patricia Arquette
Libérer: 2025-01-09 06:36:50
original
721 Les gens l'ont consulté

How to Mock HttpContext.Current.Session for Unit Testing?

Code de test unitaire qui utilise HttpContext.Current.Session

Question :

En essayant pour tester unitairement un service Web, je rencontre une exception de référence nulle lors de la définition Valeurs HttpContext.Current.Session. Malgré la création du contexte à l'aide d'un SimpleWorkerRequest, HttpContext.Current.Session reste nul. Comment puis-je initialiser la session en cours dans le test unitaire ?

Réponse :

Pour se moquer du HttpContext et de son objet de session, vous pouvez utiliser l'une des deux approches suivantes :

  1. Utilisation Réflexion :

    <br>public static HttpContext FakeHttpContext()<br>{<br> var httpRequest = new HttpRequest("", "http://example.com/" , "");<br> var stringWriter = new StringWriter();<br> var httpResponse = new HttpResponse(stringWriter);<br> var httpContext = new HttpContext(httpRequest, httpResponse);</p>
    <p>var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(),</p>
    <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">                                     new HttpStaticObjectsCollection(), 10, true,
                                         HttpCookieMode.AutoDetect,
                                         SessionStateMode.InProc, false);
    
    Copier après la connexion

httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor(

                         BindingFlags.NonPublic | BindingFlags.Instance,
                         null, CallingConventions.Standard,
                         new[] { typeof(HttpSessionStateContainer) },
                         null)
                 .Invoke(new object[] { sessionContainer });
Copier après la connexion

return httpContext;
}

  • Utilisation de SessionStateUtility :

    <br>SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);<br> 

  • Une fois que vous avez créé le HttpContext fictif, vous pouvez le définir comme contexte actuel pour vos tests unitaires :

    <br>HttpContext.Current = MockHelper.FakeHttpContext();<br>

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