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
Patricia ArquetteOriginal
2025-01-09 06:36:50693Durchsuche

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>
    <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;
    }

  2. 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!

Stellungnahme:
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