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
Patricia Arquetteasal
2025-01-09 06:36:50647semak imbas

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

    kembali httpContext;
    }

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

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