如何使用MOQ模拟Controller RouteData?

时间:2011-04-04 11:33:03

标签: asp.net-mvc mocking moq

我的视图有文件附件以及验证码验证。问题是我使用MVCMockHelpers进行文件验证,但在设置控制器上下文时重新初始化路由数据(new RouteData())。我的验证码验证总是失败,因为它试图从RouteData获取值。任何有关如何模拟路线数据的帮助都非常感谢。

先谢谢。

此致

拉​​加

1 个答案:

答案 0 :(得分:2)

var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);

var mockedRequest = new Mock<HttpRequestBase>();
mockedRequest.Setup(m => m.AppRelativeCurrentExecutionFilePath).Returns("~/");

var mockedHttpContext = new Mock<HttpContextBase>();
mockedHttpContext.Setup(m => m.Request).Returns(mockedRequest.Object);

var controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(c => c.RouteData).Returns(routes.GetRouteData(mockedHttpContext.Object));
controllerContext.Setup(c => c.HttpContext).Returns(mockedHttpContext.Object);
controllerContext.Setup(c => c.Controller).Returns(new Mock<ControllerBase>().Object);

我有类似的东西 - 我倾向于将所有这些类型的Mocks包装在帮助器中,如果需要,可以修改测试中的设置,例如更改AppRelativeCurrentExecutionFilePath或路径数据。