Heim > Backend-Entwicklung > C++ > Wie verspotte ich HttpContext.Current.Session für Unit-Tests?

Wie verspotte ich HttpContext.Current.Session für Unit-Tests?

Patricia Arquette
Freigeben: 2025-01-09 06:36:50
Original
690 Leute haben es durchsucht

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

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:

  1. 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);
    
    Nach dem Login kopieren

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

                         BindingFlags.NonPublic | BindingFlags.Instance,
                         null, CallingConventions.Standard,
                         new[] { typeof(HttpSessionStateContainer) },
                         null)
                 .Invoke(new object[] { sessionContainer });
Nach dem Login kopieren

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!

    Quelle:php.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Neueste Artikel des Autors
    Beliebte Empfehlungen
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage