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
692 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!

    source:php.cn
    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