再次 - Jasperreports...
因此,我们得到了带有类似于此的图表和表格的报告:
JAN | FEB | MAR | ... | DEC | SUM
----+-----+-----+-----+-----+----
5 | 1 | 9 | 120 | 20 | 155
(Numbers represent amounts of vehicles)
在这些表下方有多个表,其中包含上表中更详细的数据(以向下钻取的方式)。
我们将这些报告导出为 PDF,并在 Web 应用程序中作为可下载文档提供。所需的数据是在专门的 Java 工厂中计算出来的。根据报告,有一个工厂提供带有哑数据对象的列表。这些对象包含显示在图表和表格中的汇总数字。
此外,数字是超链接。他们转发到一个 servlet,该 servlet 提供一个 XLS 导出,其中包含有关每辆车的详细数据。当然,每个超链接都有一堆 servlet 的参数。
我们想要拥有的:
一个完全自动化的测试,它执行以下操作:
- 检查每个表的数据完整性(sum列中的数字真的是之前每列的总和)
- 检查明细表相对于上级表的数据完整性(JAN列总和=上级表JAN列数)
- 获取每个数字的超链接并将其提供给 XLS 导出,以检查 XLS 中的车辆数量是否等于表中显示的数字
所以测试应该与此类似:
Test -> generate PDF report -> check table integrity -> parse links -> check XLS -> assertEverythingLooksFine()
我们尝试过的:
目前,PDF 报告被写入 aByteArrayOutputStream
以将数据转发到 a 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
- 碧玉报告 4.7.1
我希望这个问题不要太乱,你不要口头上把我打死;)