java - 由于预告片,两个相同 PDF 文件的比较失败
问题描述
我是新来的,在 Java 方面有点经验。如果我下载了一些 pdf 文件并尝试将其与我的本地文件进行比较,我创建了简单的单元测试。
final byte[] content = mockMvc.perform(
get(URL, SAMPLE_1_ID)
.contentType(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk())
.andReturn().getResponse().getContentAsByteArray();
final byte[] expectedContent = Files.readAllBytes(Paths.get("src\\test\\resources\\my-local-file.pdf"));
assertThat(content).isEqualTo(expectedContent);
我正在尝试比较两个完全相同的 PDF 文件,但是当我使用字节比较时,这给了我:
Expected :[B@1b708791
Actual :[B@42e6e4b6
实际上,我试图找出错误并发现了这一点(使用字符串输出格式(.getContentAsString()
)时)
在第一个文件中:
trailer
<</Info 7 0 R/ID [<435536b10a5043b4c9e7a580fddc1aad><0c71af32c6741a3e5d5b226eb852934a>]/Root 6 0 R/Size 8>>
startxref
3274
%%EOF
在第二个文件中:
trailer
<</Info 7 0 R/ID [<af96b826e05e3a7d865b83646cae3b40><98b845965d6bf45ee9a8faf6f6be9981>]/Root 6 0 R/Size 8>>
startxref
3274
%%EOF
正如你所看到的,ID 不同,这就是我有断言失败的原因
我发现每个文档的标识符都是唯一的: https ://www.oreilly.com/library/view/developing-with-pdf/9781449327903/ch01.html
所以,我不知道如何比较这两个文件。
默认情况下,我不能修改响应,所以也许我可以使用比字节到字节比较更智能的东西,可以识别文件内容并只使用它的东西。
解决方案
Google 建议您应该将 PDF 呈现为图像并像此库那样比较图像:
有像这个库这样更灵活的解决方案:
推荐阅读
- ubuntu - 如何解决ansible中的这个致命错误?
- java - 学习存根和模拟的问题:无法将模拟类与单元测试联系起来
- csrf - 每个请求的 csrfp_token 或每个会话的 csrfp_token?
- python - django.db.utils.DataError: value too long for type character varying(100)
- javascript - 如何从数据库中的字段制作饼图?
- angular - 如何在 Angular 7 中使用 iframe 集成 hubspot 表单?
- mysql - 我想在两个表之间显示一个表和数据
- android - 在将当前的 android studio 3.3 更新到最新版本时出现错误
- kotlin - Vaadin 10+,如何在 kaributesting 中触发 UI.getCurrent().access
- javascript - 在 React 中嵌套三元运算符中映射函数的放置