2013-02-28 50 views
2

我想編寫一個(unit?)測試來確認我站點的站點地圖中的每個節點都是有效的。我有大約400個節點,所以顯然有一個測試寫的尖叫。此外,我們在SiteMapManager上遇到了一些性能問題,其中this SO answer暗示可能是因爲那裏存在不良節點。我特別喜歡測試以確保文件中的每個控制器和操作處理程序都是有效的(沒有拼寫錯誤,退役/重構名稱等)。如何測試我的SiteMap中的所有節點在MVC3中是否有效?

你會怎麼做這樣的事情?

回答

1

如果站點地圖中的節點正確路由到您的頁面(例如不是404處理程序),您可以使用路由測試庫(即http://mvcrouteunittester.codeplex.com/)來檢查。 事情是這樣的:

[TestMethod] 
    public void TestSiteMap() 
    { 
     // Arrange 
     var tester = new RouteTester<MvcApplication>(); 
     SiteMapNodeCollection nodes = LoadAllNodes(); 
     foreach (SiteMapNode node in nodes) 
     { 
     //check route results 
     tester.WithIncomingRequest(node.Url) ...//do your checks here 
     } 
    } 

這是爲LoadAllNodes一個可能的實現,如果你正在使用XML的Sitemaps:

public List<string> LoadAllNodes(string siteMapFileName) 
    { 

     XmlDocument doc = new XmlDocument(); 
     doc.Load(siteMapFileName); 

     var urls = new List<string>(); 
     AddNodes(doc.DocumentElement.ChildNodes, urls); 
     return urls; 
    } 

    private void AddNodes(XmlNodeList nodes, List<string> urls) 
    {    
     foreach (XmlNode child in nodes.OfType<XmlElement>()) 
     { 
      urls.Add(child.Attributes["url"].Value); 
      AddNodes(child.ChildNodes, urls); 
     } 
    } 
+0

究竟會'LoadAllNodes'是什麼樣的?這是一個障礙,我不知道如何去過去,因爲它是一個沒有主動託管的Web應用程序中的內容文件。 – Jaxidian 2013-02-28 17:18:48

+0

我在回答中添加了一個可能的實現 – 2013-03-01 09:38:06

+0

今天晚些時候或明天晚些時候我會嘗試這樣的事情。謝謝!! – Jaxidian 2013-03-02 19:57:47

相關問題