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

cha*_*had 13 language-agnostic pdf unit-testing

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

提前致谢.

IAd*_*ter 8

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

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


Dav*_*der 8

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

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

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