3

我有通过TagBuilders生成 html 的代码 我如何测试是否生成了正确的 HTML?我的 TagBuilder 不仅仅是一个标签那么简单,它还包含其他标签。所以我有一个返回 TagBuilder 对象的函数,它带有以下 HTML

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

所以,为了测试我们是否有第一个复选框,我们这样做:

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

这似乎是错误的。还有另一种方法可以做到这一点吗?

4

1 回答 1

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 将尝试为您修复它,从而导致奇怪的测试问题。

于 2011-08-18T21:23:27.133 回答