【问题标题】:Mocking ControllerContext could not find reference模拟 ControllerContext 找不到参考
【发布时间】:2016-05-25 10:49:14
【问题描述】:

问题是由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; 的任何想法。

【问题讨论】:

  • 您安装了错误的 MVC 包。在您的单元测试项目中安装与您在 Web 应用程序项目中使用的相同。
  • 我好像没有MVC包。因为是api项目
  • ...然后在我之前的评论中将“MVC”替换为“WebAPI”。
  • 同样的错误,检查包是否相同。我在两个项目中都安装了 Microsoft.AspNet.Mvc。版本也一样。

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


【解决方案1】:

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

在我看来,您需要模拟 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 组件也不可互换。始终验证您在项目中使用的是正确的。

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多