出现了。我做了以下事情:
我通过安装 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 类。
怎么办:
-
确保已将 Web API 包安装到单元测试项目中:
Install-Package Microsoft.AspNet.WebApi
-
从单元测试项目中删除对 MVC 程序集的任何引用(当然,仅当您不需要测试 MVC 组件时才执行此操作)
-
确保在单元测试类中导入正确的命名空间(而不是 MVC 命名空间):
using System.Web.Http.Controllers;
请注意,即使类名相同,MVC 组件和 Web API 组件也不能互换。始终验证您在项目中使用了正确的方法。