如何设计生成PDF文档的单元测试?

时间:2010-10-29 16:33:59

标签: unit-testing language-agnostic pdf

我在使用单元测试时迟到了...试图找出最佳实践等等。我的问题是,给定一个负责生成PDF(或Doc / Html / Xml /等)的类,我将如何测试最终输出文件是否正确?我想一个基于文本的文件(xml),我可以看看字符串是否匹配,但二进制文件(pdf)怎么样?我应该检查MD5哈希吗?我应该测试一下吗?

提前致谢。

3 个答案:

答案 0 :(得分:8)

我使用pdfbox从生成的PDF中提取文本,并检查它是否包含应该包含的数据。这不会检查数据是否在正确的位置,但我没有深入了解pdf测试。你需要思考你想要去多深,越深入你在更改后花费更多的时间来修复测试(我从来没有错误的文本在错误的地方,也许这就是为什么我不测试它)。

另一种方法是使用相同的PDF库(您用来编写它)来阅读它,或者如果您使用某个框架从模板生成PDF,则使用像iText这样的文件。

答案 1 :(得分:1)

如果它不起作用会是一个问题吗?如果是,那么是的,你应该测试它。

现在到下一个问题,如何将二进制文件比较实用程序用于比较预期和实际的pdf?如果是的话,我会用它。

答案 2 :(得分:0)

对于任务关键型PDF(例如发送给客户的PDF),我认为检查文本是不够的。您需要检查布局,字体大小,文本换行等。出于与我们使用Selenium检查网页相同的原因。

我采用了将PDF转换为图像的方法,并将该图像与已知的“正确”图像进行比较。我们的PDF没有经常更改,也没有包含随时间变化的任何内容(例如“今天”的日期)。所以这种方法效果很好 - 使用相同的输入数据,我们总能生成相同的输出PDF。

我认为PDFUnit现在已经内置了对此的支持,还有更多: http://www.pdfunit.com/en/documentation/java/testscope/rendered-pages.html

相关问题