2

サイトのサイトマップ内のすべてのノードが有効であることを確認するための(単体?)テストを作成したいと思います。私は最大400のノードを持っているので、テストを作成することは明らかに悲鳴を上げています。また、でパフォーマンスの問題が発生しています。これはSiteMapManagerこのSOの回答が、ノードの不良が原因である可能性があることを示しています。特に、ファイル内のすべてのコントローラーとアクションハンドラーが有効であることを確認するためにテストしたいと思います(タイプミス、廃止/リファクタリングされた名前などはありません)。

このようなことをどのように行いますか?

4

1 に答える 1

1

ルーティングテストライブラリ(つまり、http://mvcrouteunittester.codeplex.com/)を使用て、サイトマップ内のノードがページに正しくルーティングされているかどうかを確認できます(たとえば、404ハンドラーにはルーティングされません)。このようなもの:

 [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
      }
   }

これは、Xmlサイトマップを使用している場合のLoadAllNodesの可能な実装です。

 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);
        }
    }
于 2013-02-28T17:00:40.903 に答える