Mocking ControllerContext找不到引用

时间:2016-05-25 10:49:14

标签: c# asp.net asp.net-web-api moq

this问题导致问题出现。我做了以下事情:

我通过安装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;的任何想法。

1 个答案:

答案 0 :(得分:0)

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

在我看来,你需要模拟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. 确保在Unit Test类中导入正确的命名空间(而不是MVC):
    using System.Web.Http.Controllers;

  4. 请注意,即使类名相同,MVC组件和Web API组件也可以互换。始终确认您在项目中使用了正确的。