Как смоделировать контроллер RouteData с MOQ? - PullRequest
2 голосов
/ 04 апреля 2011

Мое представление имеет вложение файла, а также проверку Captcha.Проблема в том, что я использую MVCMockHelpers для проверки моего файла, но он повторно инициализирует данные маршрута (новый RouteData ()) при настройке контекста контроллера.Моя проверка капчи всегда терпит неудачу, так как она пытается получить значения из RouteData.Любая помощь в том, как имитировать данные маршрута, очень ценится.

Заранее спасибо.

С уважением,

Раджа

1 Ответ

2 голосов
/ 06 октября 2011
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 или данных маршрута.

...