asp.net-mvc - ASP.NET MVC - 单元测试由 TagBuilders 生成的 HTML

标签 asp.net-mvc unit-testing tagbuilder

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

<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=".." />");  

这似乎是错误的。还有另一种方法吗?

最佳答案

你可以做的是使用 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 会尝试为您修复它,从而导致奇怪的测试问题。

关于asp.net-mvc - ASP.NET MVC - 单元测试由 TagBuilders 生成的 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114169/

相关文章:

c# - 从本地客户端系统的时间转换为 CST,反之亦然

c# - 如何使用嵌套类从特定的Model转换为ViewModel,反之亦然?

c++ - c++ mac OS 中的自动化单元测试

unit-testing - 对不同用户表现不同的软件进行单元测试的最佳方法是什么?

c# - ASP.NET MVC TagBuilder.SetInnerText() 没有正确设置文本

javascript - 将大量数据从 Web 服务器传输到客户端

asp.net-mvc - 如何让 ASP.NET MVC 站点在 Mono 上运行?

ruby-on-rails - 单元测试如何使验证 URL 格式的测试失败

asp.net-mvc - 嵌套 TagBuilder -作为 TagBuilderTree-