我们的任务是使用纯 JRXML(不涉及自定义 Java 代码)实现多个报告。有两个主要原因:报告可以仅使用 SQL 查询生成(不需要自定义代码),并且它们应该易于部署 JasperReport 服务器(没有 Java 代码 = 不需要安装自定义数据源和库)。
但是,我们仍然需要对这些报告进行自动化测试。我们决定将数据检索(SQL 查询)和报告呈现的测试分开。
为了测试 SQL,我们希望从 JRXML 模板中提取实际查询,以便更好地进行未来的测试维护。
我们可以手动将报告查询复制到我们的测试中,使用字符串替换函数将所有参数手动替换为实际值,等等。然而在这种情况下,我们将被迫在两个地方手动维护相同的查询:我们的测试和我们的 JRXML 模板。我们想避免它。
从 JRXML 检索的 SQL 查询的问题在于它们仍然包含特定于 JasperReport 的占位符。就像是:
SELECT name, department FROM employees WHERE employee_id = $P{employeeId}
到目前为止,我已经找到了一些我们可能会使用的东西(参见这个线程)。然而,它仍然涉及 JasperReports 库实现的部分逻辑重复(我们需要重复处理 JRQueryChunks 和向查询添加参数值的逻辑)。
有没有更好的方法(我的意思是从 JRXML 测试 SQL)?
谢谢!