我想测试我的应用程序的所有jasper报告。我希望能够发现:
JasperCompileManager.compileReport(some inputStream)
是否会抛出JRException
是一个不错的选择吗?)JasperFillManager.fillReport(someReport, someParameters, someDataSource)
不会抛出JRException
是一个不错的选择吗?)理想情况下,我希望保持测试过程尽可能最通用。问题是每个jasper都有不同的数据源,所以为了检测这个错误,我需要在列表中生成一些数据(对吗?),我需要生成的这些数据对于我的应用程序的每个jasper都是不同的。所以我不知道我能够重用多少测试代码。你会采取什么方法?
谢谢!
答案 0 :(得分:2)
对于编译问题,一种方法是使用iReport工具,所有报告模板都可以成功编译;假设您正在使用模板,然后将数据填充到其中。
我发现以下链接很有用,
http://flexingcode.blogspot.com/2009/04/junit-for-jasper-reports.html
希望有所帮助,
馒头
答案 1 :(得分:2)
我为测试方面创建了几个单元测试。
编译问题:我创建了一个类来加载和编译我的所有模板。我的环境是基于网络的。所以我也测试了这条路径。
填写:我模拟了数据和JRDataSource来填充模板,这对我来说很有用。
渲染:我没有找到一个好的方法来做到这一点。有人有想法吗?
而且,我通常使用JavaBean数据源,以便使用传统的Java单元测试方法测试报告。
答案 2 :(得分:1)
对于自动编译,您可以尝试使用Ant脚本编译报告(请参阅1或http://jasperreports.sourceforge.net/api/net/sf/jasperreports/ant/package-summary.html)
Ant任务适用于自动构建或连续集成系统,如maven或jenkins。
答案 3 :(得分:1)
渲染的一种方法是将报告导出为PDF,然后使用类似PDFBox(Apache)的内容来测试内容。 您也可以导出到Excel文件,然后使用Apache POI或JExcelAPI测试单元格内容。
此致
弗兰
答案 4 :(得分:1)
关于测试PDF文档内容的PDFbox方法:我刚刚发现了jPdfUnit开源项目,它有很大帮助:
在这里查看文档: http://jpdfunit.sourceforge.net/docs/GettingStarted.html
它基于junit 3并且多年来一直没有维护,但它确实有效。 我必须应用的一个调整就是将pdfbox版本设置为1.8.13。如果你正在使用maven,请把它放在你的身上:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<!-- jpdfunit is not compatible with pdfbox 2 (java5 vs java6) -->
<version>1.8.13</version>
</dependency>
</dependencies>
</dependencyManagement>
答案 5 :(得分:1)
对于编译问题和填充问题:是的,您可以按照描述进行操作,只是尝试编译并填写报告。如果这不会引发异常,那么你没事。
对于检查渲染问题的第三步,我将报告导出为XML:
String xml = JasperExportManager.exportReportToXml(
JasperFillManager.fillReport(report, params, dataSource)
);
理论上,XML是PDF文件的精确表示,但其格式在测试中易于阅读。例如。如果字段太长而内容被截断,那么它也会在XML中被截断。所有值都已经处于“呈现”格式,因此,如果您是有一个用(DecimalFormat)-pattern格式化的数字,那么数字将在XML中格式化。字段的uuid-identifier也仍然存在于XML中,因此您也可以轻松找到字段。要检查字段,您可以例如做一些事情:
hasXPath("//*[@uuid = '" + field.getUuid() + "']/../*[local-name() = 'textContent']", matcher)