Rumah >pembangunan bahagian belakang >C++ >Bagaimana Berkesan Mengejek HttpContext dalam ASP.NET MVC dengan Moq?

Bagaimana Berkesan Mengejek HttpContext dalam ASP.NET MVC dengan Moq?

Patricia Arquette
Patricia Arquetteasal
2025-01-11 20:51:43182semak imbas

How to Effectively Mock HttpContext in ASP.NET MVC with 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn