2011-03-01 28 views
4

非常简单,我希望能够测试一个Asp.Net Web窗体服务器控件正在输出正确的Html,因为它将构建动态内容。我刚刚开始创建控件,并希望以TDD风格构建可获取输出的Html。来自HtmlTextWriter的测试输出

我创建了一个单独的类来完成实际的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输出的任何人可以提供任何建议的最佳途径?

回答

2

你可以确保你的html输出格式良好的xml。然后,在您的测试代码中,将输出加载到XmlDocument中,从而免除所有空白问题。然后你可以检查所有的标签是否真的存在,并且是它们应该在XmlDocument中的位置。

+0

感谢的是,没想到装成的XmlDocument的,可能工作 – Nathan 2011-03-01 16:06:41

+0

这也将自动执行代码的良好性,尽管这可能在这里没什么重要。 – 2011-03-01 16:14:42

+0

对不起,它花了一段时间很忙,但没有回答你的答案,因为它最适合我目前的情况。干杯 – Nathan 2011-03-21 10:17:38

0

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

+0

我会否在CI服务器上遇到任何问题? – Nathan 2011-03-01 16:06:09

+0

不明白为什么 - 它不启动浏览器或类似的东西。 – dez 2011-03-02 18:55:25