我想编写一个(单元?)测试来确认我站点站点地图中的每个节点都是有效的。我有大约 400 个节点,所以写一个测试显然是在尖叫。此外,我们遇到了一些性能问题SiteMapManager
,这个 SO 答案表明这可能是因为那里的节点不好。我特别想测试以确保文件中的每个控制器和操作处理程序都是有效的(没有拼写错误、退役/重构的名称等)。
你会怎么做这样的事情?
您可以使用路由测试库(即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);
}
}