Mocking RouteTable.Routes.GetVirtualPath в MVC - PullRequest
3 голосов
/ 27 апреля 2009

У меня есть пейджинговый контроллер с методом, который вызывает

RouteTable.Routes.GetVirtualPath(this.viewContext.RequestContext, valueDictionary)

Я пытаюсь протестировать этот метод с использованием насмешек Rhino, и я не уверен, как имитировать GetVirtualPath для возврата маршрута, отличного от нуля. Я издеваюсь над RequestContext, но я не уверен, какие методы / свойства должны быть заглушки.

Путем надлежащим образом заглушения mockRequestContext должен ли GetVirtualPath возвращать ненулевой путь, и если да, что нужно указать для работы?

Любой совет высоко ценится.

Ответы [ 2 ]

1 голос
/ 08 января 2010

Если вам не нужен полный виртуальный путь, а только URL-адрес, который он генерирует, вы можете вместо этого использовать:

new UrlHelper(ControllerContext.RequestContext).RouteUrl(routeValueDictionary)

... и макет ControllerContext:

var mockHttpContext = new Mock<HttpContextBase>();

var controllerContext
    = new ControllerContext(
        mockHttpContext.Object,
        new RouteData(), 
        new Mock<ControllerBase>().Object);

var myController = new MyController { ControllerContext = controllerContext };

У меня была именно эта проблема, но, похоже, это решило ее.

1 голос
/ 27 апреля 2009

Не уверен, что понимаю ваш вопрос, но это выглядит примерно так:

IRouteTable routeTableMock = RhinoMocks.CreateMock<IRouteTable>();

// assuming that IRouteTable.Routes is of type IRoutes.
IRoutes routes = RhinoMocks.CreateMock<IRoutes>();

// return the routes with the mock
routeTableMock.Stub(x => x.Routes).Return(routes);

// setup the mock for GetVirtualPath
routes.Stub(
  x => x.GetVirtualPath(
    Arg<RequestContext>.Is.Anything, 
    Arg<IDictionary>.Is.Anything)
  .Return(/* whatever */);

Если это не то, что вы ищете, вы должны рассказать больше о ваших классах и о том, что вы хотите проверить.

...