【发布时间】:2013-04-05 10:36:51
【问题描述】:
再次 - Jasperreports...
因此,我们得到了包含类似于以下图表和表格的报告:
JAN | FEB | MAR | ... | DEC | SUM
----+-----+-----+-----+-----+----
5 | 1 | 9 | 120 | 20 | 155
(Numbers represent amounts of vehicles)
在这些表格下方有多个表格,其中包含上表中更详细的数据(以向下钻取的方式)。
我们将这些报告导出为 PDF,并在网络应用程序中作为可下载文档提供。所需的数据是在专门的 Java 工厂中计算出来的。根据报告,有一个工厂提供带有哑数据对象的列表。这些对象包含显示在图表和表格中的汇总数字。
此外,数字是超链接。他们转发到一个 servlet,该 servlet 提供一个 XLS 导出,其中包含有关每辆车的详细数据。当然,每个超链接都有一堆 servlet 的参数。
我们想要的:
执行以下操作的全自动测试:
- 检查每个表的数据完整性(求和列中的数字真的是之前每列的总和)
- 检查明细表相对于上级表的数据完整性(JAN列总和=上级表JAN列数)
- 获取每个号码的超链接,并将其提供给 XLS 导出,以检查 XLS 中的车辆数量是否等于表格中显示的数量
所以测试应该类似这样:
Test -> generate PDF report -> check table integrity -> parse links -> check XLS -> assertEverythingLooksFine()
我们的尝试:
目前,PDF 报告被写入ByteArrayOutputStream 以将数据转发到PdfReader,后者使用SimpleTextExtractionStrategy 对其进行解析。这样虽然很麻烦,但可以检查表的完整性。此外,无法获取超链接。另一个想法是将报告导出为 HTML 而不是 PDF 以获取超链接。检查表的完整性更加麻烦,因为 JasperReports 不会生成 HTML 表,而是生成一堆 DIV。
补充说明:
- 是的,也可以根据工厂的输出来检查表的完整性——我在写这个问题时想到了这个想法。但真正重要的测试点是 XLS 导出,导出的参数是在 JasperReports 中生成的
- 是的,生成导出参数也可以在工厂完成,但我认为它不属于那里(层架构等)
- 我知道,在单元测试中分析二进制格式的输出是个坏主意,但是 JasperReports 是一个相当黑的盒子,我们在 jrxml-stuff 中做了很多工作
- 我还想到了某种格式化程序/定制程序,它在生成时访问元素
- 我已阅读http://whathaveyoutried.com 并尽我所能;)
我的问题:
- 您如何看待这种方法?合理吗?
- 我是否遗漏了一些可以做得更好的地方?
- JasperReports 是否有某种 API 或接口可以访问以更轻松地访问生成的输出?也许是格式化程序/定制程序方法?
- 有没有更好的阅读 PDF 的 API?
- 我是否忘记了合理的问题? ;)
我们使用哪些版本:
- Java 1.6
- 兴趣点 3.8
- iText 5.1.3
- JasperReports 4.7.1
我希望这个问题不要太乱,你不要在口头上把我打死;)
【问题讨论】:
-
您好,SO 采用简单的方案,一问一答。如果你有这么多话题,最好的方法是联系 JasperSoft 的人。他们是非常乐于助人的人。
标签: java unit-testing pdf jasper-reports