首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟RouteData以测试HtmlHelper RouteLink

模拟RouteData以测试HtmlHelper RouteLink
EN

Stack Overflow用户
提问于 2012-04-05 05:33:05
回答 1查看 1.9K关注 0票数 1

帮助者:

代码语言:javascript
复制
public static MvcHtmlString RouteLink(this HtmlHelper helper, String linkText, String routeName, Object routeValues, String status)
{
    if (status.ToLower() == "post-game" || status.ToLower() == "mid-game")
    {
        return helper.RouteLink(linkText, routeName, routeValues);
    }

    return MvcHtmlString.Create(" ");
}

单元测试:

代码语言:javascript
复制
[TestMethod]
public void RouteLinkTest()
{
    var httpContext = new Mock<HttpContextBase>();
    var routeData = new Mock<RouteData>();
    var viewContext = new ViewContext { HttpContext = httpContext.Object, RouteData = routeData.Object };

    var helper = new HtmlHelper(viewContext, new Mock<IViewDataContainer>().Object);
    var target01 = helper.RouteLink("Linking Text", "route-name", new { id = "id" }, "status");
    Assert.IsNotNull(target01);
}

错误:

代码语言:javascript
复制
Test method Web.Tests.Extensions.HtmlHelpersTest.RouteLinkTest threw exception: 
System.ArgumentException: A route named 'route-name' could not be found in the route collection.
Parameter name: name

问题:如何模拟路由以获得正确的路由名称?

EN

回答 1

Stack Overflow用户

发布于 2012-04-06 00:38:15

代替mockin,routevalues告诉MvcApplication注册它们

代码语言:javascript
复制
  var routes = new RouteCollection();
  MvcApplication.RegisterRoutes(routes);

当我必须用这样的东西在我的控制器中测试一些redirectToAction时,我会使用它

代码语言:javascript
复制
  var controller = GetController();
  var httpContext = Utilities.MockControllerContext(true, false).Object;
  controller.ControllerContext = new ControllerContext(httpContext, new RouteData(), controller);
  var routes = new RouteCollection();
  MvcApplication.RegisterRoutes(routes);
  controller.Url = new UrlHelper(new RequestContext(httpContext, new RouteData()), routes);
  var result = controller.DoMyStuff();
  Assert.IsInstanceOfType(typeof(RedirectResult), result);
  var actual = (RedirectResult)result;
  Assert.AreEqual("/myurl", actual.Url.ToString());

我从来没有测试过像你这样的帮手,但我想这应该是可行的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10019571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档