Unit-Testcode, der HttpContext.Current.Session nutzt
Frage:
Beim Versuch Um einen Webdienst einem Unit-Test zu unterziehen, stoße ich beim Festlegen auf eine Null-Referenz-Ausnahme HttpContext.Current.Session-Werte. Trotz der Erstellung des Kontexts mithilfe einer SimpleWorkerRequest bleibt HttpContext.Current.Session null. Wie kann ich die aktuelle Sitzung innerhalb des Unit-Tests initialisieren?
Antwort:
Um den HttpContext und sein Sitzungsobjekt zu verspotten, können Sie einen von zwei Ansätzen verwenden:
Verwenden Reflexion:
<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);
httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance, null, CallingConventions.Standard, new[] { typeof(HttpSessionStateContainer) }, null) .Invoke(new object[] { sessionContainer });
return httpContext;
}
Verwenden von SessionStateUtility:
<br>SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);<br>
Sobald Sie den simulierten HttpContext erstellt haben, können Sie ihn als aktuellen Kontext für Ihre Unit-Tests festlegen:
<br>HttpContext.Current = MockHelper.FakeHttpContext();<br>
Das obige ist der detaillierte Inhalt vonWie verspotte ich HttpContext.Current.Session für Unit-Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!