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:
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);
httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance, null, CallingConventions.Standard, new[] { typeof(HttpSessionStateContainer) }, null) .Invoke(new object[] { sessionContainer });
kembali httpContext;
}
Menggunakan SessionStateUtility:
<br>SessionStateUtility.AddHttpSessionStateUtility;
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!