我如何测试碧玉报告?

15 java testing unit-testing jasper-reports

我想测试我的应用程序的所有jasper报告.我希望能够检测到:

  • 编译问题(检查JasperCompileManager.compileReport(some inputStream)不抛出JRException是一个很好的选择吗?)
  • 填充问题(检查JasperFillManager.fillReport(someReport, someParameters, someDataSource)不抛出JRException是一个很好的选择吗?)
  • 渲染问题:检测出现的"null"字符串,文本在导出的PDF文件中被截断
  • 还有其他想法吗?

理想情况下,我希望保持测试过程最通用.问题是每个jasper都有不同的数据源,所以为了检测这个错误,我需要在列表中生成一些数据(对吗?),我需要生成的这些数据对于我的应用程序的每个jasper都是不同的.所以我不知道我能够重用多少测试代码.你会采取什么方法?

谢谢!

yan*_*kee 6

对于编译问题和填写问题:是的,您可以按照描述进行操作,然后尝试编译并填写报告。如果没有抛出异常,那么就没有问题。

对于检查渲染问题的第三步,我将报告导出为 XML:

String xml = JasperExportManager.exportReportToXml(
    JasperFillManager.fillReport(report, params, dataSource)
);
Run Code Online (Sandbox Code Playgroud)

理论上,XML 是 PDF 文件的准确表示,但其格式在测试中易于阅读。例如,如果字段太长并且内容被截断,那么它在 XML 中也会被截断。所有值都已采用“渲染”格式,因此,如果您有一个使用 (DecimalFormat) 模式格式化的数字,则该数字将在 XML 中格式化。此外,字段的 uuid 标识符仍然存在于 XML 中,因此您也可以轻松找到这些字段。要检查字段,您可以执行以下操作:

hasXPath("//*[@uuid = '" + field.getUuid() + "']/../*[local-name() = 'textContent']", matcher)
Run Code Online (Sandbox Code Playgroud)


小智 1

对于编译问题,一种方法是使用iReport工具,所有报表模板都编译成功;假设您正在使用模板,然后将数据填充到其中。

我发现以下链接很有用,

http://flexingcode.blogspot.com/2009/04/junit-for-jasper-reports.html

希望有帮助,

曼朱

  • 链接不再可用 (2认同)