我想嘲笑一个
ASP.NET MVC2 Controller
使用
MOQ
但我有一个错误,因为我想嘲笑
不可重写的属性
. 请问我该怎么做?
注意:我要模拟的控制器是(
abstract
)
ASP.NET MVC2控制器
…不是自定义控制器。为什么?我想测试一下
自定义控制器扩展
我做了。我实际上没有自定义控制器类。
代码:
// My own test helper magic shiz.
httpContextBaseMock = MockHelpers.GetAnHttpContextBaseMock();
controllerContextMock = new Mock<ControllerContext>();
controllerContextMock.Setup(x => x.HttpContext)
.Returns(httpContextBaseMock.Object);
controllerMock = new Mock<Controller>();
controllerMock.SetupGet(x => x.RouteData)
.Returns(RestMockHelpers.MockRouteData().Object);
最后一行失败了…
System.ArgumentException:无效
在不可重写的成员上设置:x
=>x.路由数据
所以我想,我不应该嘲笑
controllerContext
,但只是创建一个实例。喜欢什么
REA_ANDREW did in his SO question
…
var controllerContext = new ControllerContext(_httpContextBaseMock.Object,
new RouteData(), new Mock<ControllerBase>().Object);
var controller = new Controller(); <-- Cannot do this.
Controller class is abstract.
所以我不确定是否需要在一些什么都不做,只是继承自
Controller
. 然后举例说明。
但我觉得应该全部用模拟的方法来完成,而不是从一些开始,然后做一些实例…
我很困惑:(
更新:
我被要求解释我要测试的代码。我有一个自定义的viewresult,构造函数设置了一个字符串属性。我只是要确保设置了属性。
// Act.
var myResult = new MyResult(controllerMock.Object);
// Assert.
Assert.NotNull(myResult);
Assert.AreEqual("controllerName", myResult.ControllerName);