2016-02-05 73 views
3

我有一個路由擴展類。我想測試更新的routecollection列表。這是一個摘錄:單元測試asp.net路由映射擴展方法

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提取映射網址:

這是一個測試:

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

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

回答

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"); 
} 
+0

似乎工作,感謝 –

0

說實話,你正在把錯誤的邏輯來測試void方法。由於你的方法是無效的,你應該使用模擬框架並通過MapMyRoutes(this RouteCollection routes)方法中的模擬對象RouteCollection,然後驗證routes.MapHttpRoute方法調用。

參考this link代碼執行

+0

我想,雖然測試的網址,而不是僅僅驗證方法被調用 –