Pengujian unit pengawal ASP.NET MVC selalunya memerlukan ejekan HttpContext
untuk mengasingkan kod anda daripada kebergantungan pelayan web. Moq, rangka kerja mengejek yang kuat, menyediakan penyelesaian yang teguh untuk mensimulasikan HttpContext
dan sifatnya.
Cabaran:
Mengejek secara langsung HttpContext
dengan Moq memberikan perangkap biasa:
<code class="language-csharp">[TestMethod] public void Home_Message_Display_Unknown_User_when_cookie_does_not_exist() { var context = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); context .Setup(c => c.Request) .Returns(request.Object); HomeController controller = new HomeController(); // Error: HttpContext is read-only. controller.HttpContext = context.Object; ... }</code>
Percubaan untuk menetapkan HttpContext
yang dipermainkan terus kepada harta HttpContext
pengawal gagal kerana ia adalah baca sahaja.
Penyelesaian:
Pendekatan yang betul melibatkan penetapan harta ControllerContext
sebaliknya. ControllerContext
mewarisi daripada HttpContext
, menyediakan titik akses yang diperlukan:
<code class="language-csharp">controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);</code>
Bacaan Lanjut:
Untuk maklumat lebih terperinci tentang mengejek HttpContext
dan RequestContext
dengan Moq, rujuk sumber ini:
Atas ialah kandungan terperinci Bagaimana untuk mengejek HttpContext dengan betul dalam Ujian Unit MVC ASP.NET dengan Moq?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!