Asp.net HtmlTextWriter的测试输出

Asp.net HtmlTextWriter的测试输出,asp.net,unit-testing,nunit,servercontrols,Asp.net,Unit Testing,Nunit,Servercontrols,非常简单,我希望能够测试Asp.NETWebForms服务器控件是否在生成动态内容时输出正确的Html。我刚刚开始创建控件,并希望以TDD样式创建获取输出的Html 我已经创建了一个单独的类来进行实际的Html构建,这样我就能够在普通Asp.Net管道之外单独测试它 在我的单元测试中,我可以控制返回的html,但在确认html是否包含我期望的标记时遇到问题,例如: <div id="wrapper"> <div id="fields"> </div&

非常简单,我希望能够测试Asp.NETWebForms服务器控件是否在生成动态内容时输出正确的Html。我刚刚开始创建控件,并希望以TDD样式创建获取输出的Html

我已经创建了一个单独的类来进行实际的Html构建,这样我就能够在普通Asp.Net管道之外单独测试它

在我的单元测试中,我可以控制返回的html,但在确认html是否包含我期望的标记时遇到问题,例如:

<div id="wrapper">
    <div id="fields">
    </div>
    <div id="main">       
    </div> 
</div>
然后我调用以下方法:

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输出的信息。有人能提供一些关于最佳方法的建议吗?

您可以确保您的Html输出是格式良好的xml。然后,在测试代码中,将输出加载到一个XmlDocument中,这样就没有了所有的空白问题。然后,您可以检查所有标记是否真的存在,以及它们在XmlDocument中的位置。

我会将其加载到中,然后使用XPath查询,或者使用项目执行一些QuerySelectorAll()jQuery样式。

测试XML和HTML的内置功能可以帮助您


与此相关的CI server会有任何问题吗?不明白为什么-它不会启动浏览器或类似的东西。为此,我没有想到加载到XmlDocument中,这可能会起作用。这也会自动强制执行代码的良好格式,虽然这在这里可能是次要的。对不起,它花了一段时间很忙,但你的答案已经没有了,因为它最适合我目前的情况。干杯谢谢,我去看看
    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();
}