ルーティングテストライブラリ(つまり、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);
}
}