3

我有一个带有调用方法的分页控制器

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

我正在尝试使用 Rhino 模拟测试此方法,但我不确定如何模拟 GetVirtualPath 以返回 null 以外的路由。我在嘲笑 RequestContext 但我不确定哪些方法/属性需要被存根。

通过适当地对 mockRequestContext 进行存根,GetVirtualPath 是否应该返回一个非空路径,如果是这样,需要对什么进行存根才能使其工作?

非常感谢任何建议。

4

2 回答 2

1

不知道我是否理解你的问题,但它看起来像这样:

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 */);

如果这不是您想要的,您必须更多地介绍您的课程以及您想要测试的内容。

于 2009-04-27T09:57:21.117 回答
1

如果您不需要完整的虚拟路径,而只需要它生成的 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 };

我遇到了这个确切的问题,但这似乎已经解决了。

于 2010-01-08T00:49:46.103 回答