无法从HttpContextBase转换为HttpContextBase

Rog*_*mbe 3 c# asp.net-mvc moq

使用以下代码(使用Moq 4.0.10501.6):

HomeController controller = new HomeController();
ActionResult result = _controller.Index();

Mock<HttpResponseBase> response = new Mock<HttpResponseBase>();

Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>();
httpContext.Setup(x => x.Response).Returns(response.Object);

Mock<ControllerContext> controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(c => c.HttpContext).Returns(httpContext.Object);
result.ExecuteResult(controllerContext.Object);
Run Code Online (Sandbox Code Playgroud)

...我得到以下编译器错误:

error CS1502: The best overloaded method match for
'Moq.Language.IReturns<System.Web.Mvc.ControllerContext,
 System.Web.HttpContextBase>.Returns(System.Web.HttpContextBase)'
has some invalid arguments

error CS1503: Argument 1: cannot convert from 'System.Web.HttpContextBase
[c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\
v4.0\System.Web.dll]' to 'System.Web.HttpContextBase'
Run Code Online (Sandbox Code Playgroud)

我做错了什么?为什么我不能转换HttpContextBaseHttpContextBase

我从一个ASP.NET MVC项目开始,添加了一个NUnit测试项目,ReSharper整理了缺少的System.Web参考.根据VS中的属性窗口,我正在引用的System.Web.dll是其中的一个C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll.

Rog*_*mbe 7

我发现(感谢反射器),其HttpContextBase实际上是在System.Web.dll, Version 4.0.0.0 System.Web.Abstractions, Version 3.5.0.0.

所以,我通过添加System.Web.Abstractions, Version 4.0.0.0对项目的引用来修复它.

然而,奇怪的是,System.Web.Abstractions, Version 4.0.0.0 包含HttpContextBase.

所以,我仍然不确定发生了什么,但至少它正在编译.