首页 > 后端开发 > C++ > 如何使用 Moq 在 ASP.NET MVC 中有效模拟 HttpContext?

如何使用 Moq 在 ASP.NET MVC 中有效模拟 HttpContext?

Patricia Arquette
发布: 2025-01-11 20:51:43
原创
144 人浏览过

How to Effectively Mock HttpContext in ASP.NET MVC with Moq?

使用 Moq 在 ASP.NET MVC 中模拟 HttpContext:实用指南

当使用 Moq 对 ASP.NET MVC 控制器进行单元测试时,模拟 HttpContext 由于其只读性质而带来了挑战。 尝试直接将模拟的 HttpContext 分配给控制器的 HttpContext 属性会导致错误,如以下示例所示:

<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>
登录后复制

解决方案在于操纵ControllerContext。 这种方法提供了对底层 HttpContext 的访问,而不会违反只读约束。 方法如下:

<code class="language-csharp">controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);</code>
登录后复制

另一种有效的方法是重写基本控制器中的 Initialize 方法。这允许您将模拟的 HttpContext 注入 RequestContext:

<code class="language-csharp">protected override void Initialize(RequestContext requestContext)
{
    base.Initialize(requestContext);
    requestContext.HttpContext = context.Object;
}</code>
登录后复制

有关使用 Moq 模拟 HttpRequestBaseHttpContext 的全面指南,请参阅以下 Microsoft 文档:

以上是如何使用 Moq 在 ASP.NET MVC 中有效模拟 HttpContext?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板