Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mengejek HttpContext.Current.Session untuk Ujian Unit?

Bagaimana untuk mengejek HttpContext.Current.Session untuk Ujian Unit?

Patricia Arquette
Lepaskan: 2025-01-09 06:36:50
asal
646 orang telah melayarinya

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

Kod Ujian Unit yang Menggunakan HttpContext.Current.Session

Soalan:

Semasa mencuba untuk menguji unit perkhidmatan web, saya menghadapi pengecualian rujukan nol semasa menetapkan Nilai HttpContext.Current.Session. Walaupun mencipta konteks menggunakan SimpleWorkerRequest, HttpContext.Current.Session kekal batal. Bagaimanakah saya boleh memulakan sesi semasa dalam ujian unit?

Jawapan:

Untuk mengejek HttpContext dan objek sesinya, anda boleh menggunakan salah satu daripada dua pendekatan:

  1. Menggunakan Refleksi:

    <br>public static HttpContext FakeHttpContext()<br>{<br> var httpRequest = new HttpRequest("", "http://example.com/" , "");<br> var stringWriter = baru StringWriter();<br> var httpResponse = new HttpResponse(stringWriter);<br> var httpContext = new HttpContext(httpRequest, httpResponse);</p>
    <p>var sessionContainer = new HttpSessionStateContainer("id", baharu 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);
    
    Salin selepas log masuk

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

                         BindingFlags.NonPublic | BindingFlags.Instance,
                         null, CallingConventions.Standard,
                         new[] { typeof(HttpSessionStateContainer) },
                         null)
                 .Invoke(new object[] { sessionContainer });
Salin selepas log masuk

kembali httpContext;
}

  • Menggunakan SessionStateUtility:

    <br>SessionStateUtility.AddHttpSessionStateUtility; 

  • Setelah anda mencipta HttpContext olok-olok, anda boleh menetapkannya sebagai konteks semasa untuk ujian unit anda:

    HttpContext.Current = MockHelper.FakeHttpContext();

    Atas ialah kandungan terperinci Bagaimana untuk mengejek HttpContext.Current.Session untuk Ujian Unit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    sumber:php.cn
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Artikel terbaru oleh pengarang
    Cadangan popular
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan