3

我有一个 Java 类,它从数据库中获取表单定义,然后根据表单定义呈现 html、javascript 和 css,它使用大量“appendable.append(...).append(...)”来构建html 片段,这很容易出错。Jsp 和通用模板框架(例如 FreeMarker)在这里不是一个选项,因为 javascript、css、html 元素都是动态的(取决于表单定义)。由于某些原因,GWT 也不是一种选择。

对该渲染器进行单元测试的一种直接方法是对预期的 html 代码进行硬编码,然后与实际输出进行比较,但是测试非常脆弱。

请问,对这种 html 渲染器进行单元测试的最佳方法是什么?

谢谢大家。

4

3 回答 3

3

如果您对预期的 HTML 值进行硬编码,您的测试可能会很脆弱,但它们可能会捕获您的大部分错误。另一种方法是检查 HTML 输出中是否存在某些关键或重要标签。这种方法更加灵活,但可能会遗漏一些错误。要决定应该使用哪个,请考虑您希望 HTML 结构更改的频率。

这里有一个平衡点。你的测试越具体,它就越脆弱。但是,如果您不够具体,您的测试将不会发现任何错误。需要练习来培养对具体程度的感觉。

但是总的来说,脆性测试非常危险,因此它们可能是“更大的邪恶”。如果您的测试标记了很多误报,您将开始忽略它们,然后它们变得无用。我建议你去验证关键标签的存在。

于 2012-05-04T03:25:34.223 回答
2

我会采取双管齐下的方法。首先,您要验证您正在生成的各个片段。您的测试应验证这些组件是否按预期工作。其次,您应该验证作为一个整体生成的每个文档对其类型是否有效且一致。有第三方工具可以为您执行此验证。有关一些示例,请参见http://www.w3.org/QA/Tools/

于 2012-05-04T03:34:15.140 回答
1

您提到的比较方法是一种很好的方法,它被称为“金主”测试方法。

有一个与 junit 配合使用的验证库来执行此操作,这极大地简化了称为 Approval Tests 的过程http://www.approvaltests.com

这也有助于通过使用将在差异报告器或网络浏览器中打开您的结果和/或您的黄金大师的报告器来防止脆弱性。

您正在寻找的电话是:

Approvals.VerifyHtml(yourHtml)

你会想用其中一个来装饰你的测试

@UseReporter(DiffReporter.class)
@UseReporter(FileLauncherReporter.class)
@UseReporter({DiffReporter.class, FileLauncherReporter.class})
于 2012-05-10T13:49:36.273 回答