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
Lepaskan: 2025-01-11 20:51:43
asal
236 orang telah melayarinya

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:

[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
}
Salin selepas log masuk

Penyelesaian terletak pada memanipulasi ControllerContext sebaliknya. Pendekatan ini menyediakan akses kepada HttpContext asas tanpa melanggar kekangan baca sahaja. Begini caranya:

controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
Salin selepas log masuk

Kaedah lain yang berkesan melibatkan mengatasi kaedah Initialize dalam pengawal asas anda. Ini membolehkan anda menyuntik HttpContext yang dipermainkan ke dalam RequestContext:

protected override void Initialize(RequestContext requestContext)
{
    base.Initialize(requestContext);
    requestContext.HttpContext = context.Object;
}
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan