【问题标题】:Unit test asp.net route mapping extension method单元测试asp.net路由映射扩展方法
【发布时间】:2016-05-15 14:32:10
【问题描述】:

我有一个路由扩展类。我想测试 routecollection 的更新列表。这是摘录:

public static void MapMyRoutes(this RouteCollection routes)
{
    //do some stuff
    routes.MapHttpRoute(null, controllerPath.Path, new { @namespace = controllerPath.Namespace, controller = controllerPath.ControllerName, id = UrlParameter.Optional });
}

我想对这个扩展进行单元测试,但不知道如何从 routecollection 中提取映射的 url:

这是一个测试:

[TestMethod]
public void TestMapMyRoutesMapsCorrectly()
{
    var routes = new RouteCollection();
    routes.MapMyRoutes();

    foreach (var route in routes)
    {
        Assert.AreEqual(route.??, "v1/api/myRoute");
    }
}

【问题讨论】:

    标签: c# unit-testing asp.net-mvc-5 routes


    【解决方案1】:

    RoutesCollection 被定义为Collection<RouteBase>,因此将每个项目转换为 Route,即:

    foreach (var route in routes.Cast<Route>())
    {
        // Url may not in fact be the correct property …
        Assert.AreEqual(route.Url, "v1/api/myRoute");
    }
    

    【讨论】:

      【解决方案2】:

      说实话,您在测试 void 方法时使用了错误的逻辑。由于您的方法无效,您应该使用模拟框架并在 MapMyRoutes(this RouteCollection routes) 方法中传递模拟的 RouteCollection 对象,然后验证 routes.MapHttpRoute 方法调用。

      代码实现参考this link

      【讨论】:

      • 我想测试 url,而不仅仅是验证方法是否被调用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2010-09-05
      • 1970-01-01
      相关资源
      最近更新 更多