首页 >后端开发 >C++ >如何使用 Moq 在 ASP.NET MVC 单元测试中正确模拟 HttpContext?

如何使用 Moq 在 ASP.NET MVC 单元测试中正确模拟 HttpContext?

Linda Hamilton
Linda Hamilton原创
2025-01-11 20:46:15323浏览

How to Properly Mock HttpContext in ASP.NET MVC Unit Tests with Moq?

使用 Moq 在 ASP.NET MVC 单元测试中模拟 HttpContext

单元测试 ASP.NET MVC 控制器通常需要模拟 HttpContext 将代码与 Web 服务器依赖项隔离。 Moq 是一个强大的模拟框架,为模拟 HttpContext 及其属性提供了强大的解决方案。

挑战:

使用 Moq 直接嘲笑 HttpContext 会出现一个常见的陷阱:

<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>

尝试将模拟的 HttpContext 直接分配给控制器的 HttpContext 属性会失败,因为它是只读的。

解决方案:

正确的方法是设置 ControllerContext 属性。 ControllerContext 继承自 HttpContext,提供必要的访问点:

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

进一步阅读:

有关使用 Moq 模拟 HttpContextRequestContext 的更多详细信息,请参阅以下资源:

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn