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)
我做错了什么?为什么我不能转换HttpContextBase为HttpContextBase?
我从一个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.
我发现(感谢反射器),其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.
所以,我仍然不确定发生了什么,但至少它正在编译.