2011-08-18 19 views
3

我有通过TagBuilders生成html的代码我如何测试是否生成了正确的HTML?我的TagBuilder不像一个标签那么简单,它还包含其他标签。所以,我有以下与HTMLASP.NET MVC - 由TagBuilder生成的单元测试HTML

<div> 
    <input type="checkbox" name=".." /> <label for=".." /> 
    <input type="checkbox" name=".." /> <label for=".." /> 
    <input type="checkbox" name=".." /> <label for=".." /> 
<div/> 

所以返回TagBuilder对象的函数,来测试,如果我们有我们做的第一个复选框:

Assert.True(MyTag.InnerHtml.Contains("<input type="checkbox" name=".." />"); 

这似乎是错误的。有没有另一种方法来做到这一点?

回答

3

你可以做的是使用HtmlAgilityPack来生成标签的HtmlDocument然后运行查询来获得元素数量等

HtmlDocument document = new HtmlDocument(); 
document.LoadHtml(MyTag.ToString()); 

var checkBoxCount = document.DocumentNode.DescendantNodes() 
        .Where(item => item.Name == "input" && item.GetAttributeValue("name", string.Empty) == "..") 
        .Count(); 

Assert.True(checkBoxCount == 3); 

您可以通过具有接受一个方法清理通话文档和谓词函数并返回项目的数量。

使用这种方法,您必须小心,您的方法输出的Html是有效的,否则HtmlAgilityPack会尝试为您解决它,导致奇怪的测试问题。