Rumah >pembangunan bahagian belakang >C++ >Bagaimana Berkesan Mengejek HttpContext dalam ASP.NET MVC dengan Moq?
Mengejek HttpContext dalam ASP.NET MVC menggunakan Moq: Panduan Praktikal
Apabila unit menguji pengawal ASP.NET MVC dengan Moq, mengejek HttpContext
memberikan cabaran kerana sifat baca sahajanya. Percubaan untuk memberikan terus HttpContext
yang dipermainkan pada harta HttpContext
pengawal mengakibatkan ralat, seperti yang dilihat dalam contoh ini:
<code class="language-csharp">[TestMethod] public void Home_Message_Display_Unknown_User_when_coockie_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(); controller.HttpContext = context.Object; // Error: Read-only property }</code>
Penyelesaian terletak pada memanipulasi ControllerContext
sebaliknya. Pendekatan ini menyediakan akses kepada HttpContext
asas tanpa melanggar kekangan baca sahaja. Begini caranya:
<code class="language-csharp">controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);</code>
Kaedah lain yang berkesan melibatkan mengatasi kaedah Initialize
dalam pengawal asas anda. Ini membolehkan anda menyuntik HttpContext
yang dipermainkan ke dalam RequestContext
:
<code class="language-csharp">protected override void Initialize(RequestContext requestContext) { base.Initialize(requestContext); requestContext.HttpContext = context.Object; }</code>
Untuk panduan menyeluruh tentang mengejek HttpRequestBase
dan HttpContext
menggunakan Moq, rujuk dokumentasi Microsoft berikut:
Atas ialah kandungan terperinci Bagaimana Berkesan Mengejek HttpContext dalam ASP.NET MVC dengan Moq?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!