很简单,我希望能够测试 Asp.Net Web 表单服务器控件是否输出正确的 Html,因为它将构建动态内容。我刚刚开始创建控件,并希望以 TDD 样式构建获取输出的 Html。
我创建了一个单独的类来进行实际的 Html 构建,以便我能够在正常的 Asp.Net 管道之外单独测试它。
在我的单元测试中,我可以控制返回的 html,但是在确认 html 包含我期望的标记时遇到问题,例如:
<div id="wrapper">
<div id="fields">
</div>
<div id="main">
</div>
</div>
并且当我使用 Nunit 时,我希望能够存储服务器控件的输出并使用 Is.StringMatching 对其进行测试,例如:
Assert.That(output, Is.StringMatching("<div id=\"main\">.*?</div>"));
不幸的是,由于输出的额外 \r \n \t 指令,这将不起作用HtmlTextwriter
。
我目前使用它的方式是创建一个StringWriter
然后使用它来创建HtmlTextWriter
这样的:
stringWriter = new StringWriter();
htmlTextWriter = new HtmlTextWriter(stringWriter);
然后我调用以下方法:
public string Build(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Id, "wrapper");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.AddAttribute(HtmlTextWriterAttribute.Id, "fields");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.RenderEndTag();
writer.WriteLine();
writer.AddAttribute(HtmlTextWriterAttribute.Id, "main");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.RenderEndTag();
writer.RenderEndTag();
return writer.InnerWriter.ToString();
}
随着 Html 变得越来越复杂,我可以预见验证输出是否正确的其他问题。
另一个限制是要求能够通过 CI 服务器(很可能是 TeamCity)运行测试,因此所有代码或引用的库都需要放在我的解决方案中。
我已经进行了相当多的谷歌搜索,但似乎找不到太多关于如何测试 Html 输出的信息,任何人都可以就最佳前进方式提供任何建议吗?