很简单,我希望能够测试Html窗体服务器控件在构建动态内容时是否输出了正确的Asp.Net。我刚刚开始创建这个控件,我想用TDD风格来构建输出的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>"));不幸的是,由于HtmlTextwriter输出的额外\r \n \t指令,这将不起作用。
我目前使用它的方式是创建一个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输出的信息。有没有人能为最好的前进方式提供任何建议?
发布于 2011-03-01 23:40:29
您可以确保您的html输出是格式良好的xml。然后,在您的测试代码中,将输出加载到XmlDocument中,这样就没有了所有的空格问题。然后,您可以检查所有标记是否真的在那里,以及它们在XmlDocument中应该在的位置。
发布于 2011-03-01 23:53:27
我会将其加载到HtmlAgilityPack中,然后使用XPath或使用fizzler项目执行一些QuerySelectorAll() jQuery样式的查询。
发布于 2011-03-02 19:32:15
内置的测试XML和HTML的能力可能会对您有所帮助。
https://stackoverflow.com/questions/5156591
复制相似问题