asp.net - 来自 HtmlTextWriter 的测试输出

标签 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 输出的信息,任何人都可以为最佳前进方向提供任何建议吗?

最佳答案

您可以确保您的 html 输出是格式良好的 xml。然后,在您的测试代码中,将输出加载到 XmlDocument 中,这样您就不会出现所有空格问题。然后,您可以检查所有标签是否真的存在,以及它们应该在 XmlDocument 中的位置。

关于asp.net - 来自 HtmlTextWriter 的测试输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5156591/

相关文章:

c# - 以编程方式将超链接添加到不是 DisplayMode=Hyperlink 的项目符号列表

c# - 如何使用 Moq 模拟 SqlDataReader - 更新

unit-testing - 用于单元测试的 TestDrive.net 'Visual Studio add in' 的开源替代方案?

c# - 如何使用EntityCollection初始化对象?

visual-studio - 如何在 Visual Studio 的特定文件夹中运行单个测试或所有测试?

c# - NUnit 理论有一个异常(exception)

c# - 具有属性的列表的 XML 序列化

.net - 英国地方政府网站的基本无障碍级别是多少?

c# - AJAXToolkit动态隐藏选项卡?

android - 使用远程调解器和分页源对具有分页 3 的存储库进行单元测试