测试HtmlTextWriter的输出

时间:2011-03-01 15:33:01

标签: asp.net unit-testing nunit servercontrols

很简单,我希望能够测试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>"));

遗憾的是,由于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输出可以有人提出任何建议的最佳前进方式吗?

3 个答案:

答案 0 :(得分:2)

您可以确保您的html输出格式正确xml。然后,在您的测试代码中,将输出加载到XmlDocument中,这样您就不会遇到所有空白问题。然后,您可以检查所有标记是否确实存在,并且它们应该与XmlDocument一起使用。

答案 1 :(得分:0)

我将它加载到HtmlAgilityPack然后使用XPath查询或使用fizzler项目执行一些QuerySelectorAll()jQuery样式。

答案 2 :(得分:0)