单元测试asp.net路由映射扩展方法

时间:2016-02-05 14:58:00

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

我有一个Routes的扩展类。我想测试更新的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");
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

请参阅this link以了解代码实现