模拟控制器上下文找不到引用


这个问题

出现了。我做了以下事情:

我通过安装 Mvc 包来修复引用。但是现在当我尝试此操作时会收到以下错误:

var mock = new Mock<ControllerContext>();
            mock.SetupGet(x => x.HttpContext.User.Identity.Name).Returns("SOMEUSER");
            mock.SetupGet(x => x.HttpContext.Request.IsAuthenticated).Returns(true);
            controller.ControllerContext = mock.Object; 

无法将System.Web.Mvc.ControllerContext转换为System.Web.Http.Controllers.ControllerContext

> controller.ControllerContext = mock.Object;

为什么在我的测试项目中无法使用System.Web.Http.Controllers.HttpControllerContext;的任何想法。

您使用了错误的包和错误的命名空间。

在我看来,你需要模拟System.Web.Http.Controllers.ControllerContext,但你提供了一个模拟System.Web.Mvc.ControllerContext实例,它不是 Web API 类,而是 ASP.NET MVC 类。

怎么办:

  1. 确保已将 Web API 包安装到单元测试项目中:
    Install-Package Microsoft.AspNet.WebApi

  2. 从单元测试项目中删除对 MVC 程序集的任何引用(当然,仅当您不需要测试 MVC 组件时才执行此操作)

  3. 确保在单元测试类中导入正确的命名空间(而不是 MVC 命名空间):
    using System.Web.Http.Controllers;

请注意,即使类名相同,MVC 组件和 Web API 组件也不能互换。始终验证您在项目中使用了正确的方法。

最新更新