Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengelakkan NullReferenceExceptions Apabila Unit Menguji Perkhidmatan Web Yang Menggunakan HttpContext.Current.Session?
Mock HttpContext.Current.Sesi dalam ujian unit
Apabila menulis ujian unit untuk perkhidmatan web yang mengakses nilai HttpContext.Current.Session
, pengecualian rujukan nol mungkin berlaku jika sesi tidak dimulakan. Untuk menyelesaikan masalah ini, anda boleh menggunakan sesi olok-olok untuk ujian unit.
Salah satu cara ialah dengan mencipta mock HttpSessionStateContainer
dengan HttpContext
baharu. Begini cara melakukannya:
<code class="language-csharp">public static HttpContext FakeHttpContext() { var httpRequest = new HttpRequest("", "http://example.com/", ""); var stringWriter = new StringWriter(); var httpResponse = new HttpResponse(stringWriter); var httpContext = new HttpContext(httpRequest, httpResponse); var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(), 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; }</code>
Sebagai alternatif, seperti yang dicadangkan oleh Brent M. Spell, anda boleh tambahkan HttpSessionStateContainer
terus ke HttpContext
:
<code class="language-csharp">SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);</code>
Gunakan sesi olok-olok ini dalam ujian unit:
<code class="language-csharp">HttpContext.Current = MockHelper.FakeHttpContext();</code>
Dengan pendekatan ini, nilai boleh ditetapkan kepada HttpContext.Current.Session
semasa ujian unit tanpa menghadapi pengecualian rujukan nol, membolehkan kefungsian bergantung sesi perkhidmatan web diuji dengan teliti.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan NullReferenceExceptions Apabila Unit Menguji Perkhidmatan Web Yang Menggunakan HttpContext.Current.Session?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!