我有一个调用控制器,调用
的方法RouteTable.Routes.GetVirtualPath(this.viewContext.RequestContext, valueDictionary)
我正在尝试使用Rhino模拟测试此方法,我不确定如何模拟GetVirtualPath以返回除null之外的路由。我在模拟RequestContext,但我不确定哪些方法/属性需要存根。
通过适当地对mockRequestContext进行存根,GetVirtualPath应该返回一个非空路径,如果是,那么为什么需要这个路径才能工作呢?
任何建议都非常感谢。
答案 0 :(得分: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 */);
如果这不是您想要的,您必须详细说明您的课程以及您想要测试的内容。
答案 1 :(得分: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 };
我遇到了这个问题,但这似乎已经解决了。