Maison >développement back-end >C++ >Comment se moquer de HttpContext.Current.Session pour les tests unitaires ?
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 :
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> <pre class="brush:php;toolbar:false"> new HttpStaticObjectsCollection(), 10, true, HttpCookieMode.AutoDetect, SessionStateMode.InProc, false);
httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance, null, CallingConventions.Standard, new[] { typeof(HttpSessionStateContainer) }, null) .Invoke(new object[] { sessionContainer });
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!