Mengatasi HttpContext.Ejekan Semasa dalam Permulaan Kelas Asas untuk Ujian Unit MVC ASP.NET
Pengujian unit aplikasi ASP.NET MVC selalunya memerlukan ejekan HttpContext.Current
untuk mensimulasikan permintaan dan respons pengguna. Masalah biasa timbul apabila kelas ujian mewarisi daripada kelas asas yang menggunakan HttpContext.Current
dalam permulaannya. Sekadar mengejek konteks untuk pengawal itu sendiri tidak mencukupi.
Contoh yang disediakan menunjukkan mengejek HttpContext
untuk pengawal menggunakan FakeControllerContext
dan SetFakeControllerContext
. Walau bagaimanapun, jika kaedah Init
kelas asas mengakses HttpContext.Current
, ini perlu ditangani secara langsung. Untuk memastikan ejekan yang konsisten, kita juga mesti mengejek HttpContext.Current
dalam permulaan ujian.
Mengejek HttpContext.Current
Dengan Berkesan
Kami boleh mengejek kelas System.Web.HttpContext
dengan berkesan dengan menggantikan sifat IPrincipal
dan IIdentity
nya. Coretan kod berikut menggambarkan ini:
<code class="language-csharp">HttpContext.Current = new HttpContext( new HttpRequest("", "http://tempuri.org", ""), new HttpResponse(new StringWriter()) ); // Simulate a logged-in user HttpContext.Current.User = new GenericPrincipal( new GenericIdentity("username"), new string[0] ); // Simulate a logged-out user HttpContext.Current.User = new GenericPrincipal( new GenericIdentity(String.Empty), new string[0] );</code>
Dengan melaksanakan strategi mengejek ini dalam kaedah permulaan ujian, sebelum memanggil kaedah Init
kelas asas, kami memastikan HttpContext.Current
diejek dengan betul, membenarkan ujian mensimulasikan interaksi pengguna dengan tepat dan mengakses HttpContext
seperti yang diperlukan . Pendekatan ini menjamin gelagat yang konsisten merentas kedua-dua pengawal dan kelas asas semasa pelaksanaan ujian.
Atas ialah kandungan terperinci Bagaimana untuk mengejek HttpContext.Current dalam Permulaan Kelas Asas untuk Ujian Unit MVC ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!