【发布时间】:2018-05-31 23:51:22
【问题描述】:
我正在从 Java 8 迁移到 Java 10,并且我正在运行我的测试,该测试现在由于包保护类而失败。构建在 maven 3.5.4 + Oracle JDK 10.0.2 下运行:
- maven-compiler-plugin 3.7.0 + asm 6.2
- maven-surefire-plugin 2.22.0 + asm 6.2 + junit 5.2.0
- 编译器/surefire 都需要 asm 6.2,因为这些插件使用的 ASM 版本存在错误。
- mockito-core 2.20.0(但之前使用的是 2.20.0 和 Java 8)。
- Eclipse 光子 R
该项目可以在这里找到ide-bugs.zip(它位于 Eclipse 论坛,因为我已经为另一个问题制作了这个Topic on Eclipse,这次是 Eclipse 的模块出现本地错误)。
测试非常简单:我们尝试以不同的访问级别模拟不同的类 - 所有这些都在 Java 8 中工作。
- 包保护类
- 公共类但未导出,未打开
- 公共类未导出但对 Mockito 开放
- 公共类未导出但对所有人开放
- 包保护类未导出但打开到 Mockito
- 包保护类未导出但对所有人开放
在 Java 8 中,情况 1、5 和 6 是相同的(访问受保护的包)。情况2、3、4相同(访问公共)。
测试失败,因为 Mockito 不能:
- 类 org.mockito.codegen.NotExportedOpenToMockitoProtected$MockitoMock$117073031 无法访问其超类 nodatafound.mjpmsuc.withopens.NotExportedOpenToMockitoProtected
- class org.mockito.codegen.NotExportedNotOpenedPublic$MockitoMock$365628885(在未命名的模块@0x3f07b12c)不能访问类nodatafound.mjpmsuc.internal.NotExportedNotOpenedPublic(在模块nodatafound.mockito_jpms_usecase),因为模块nodatafound.mockito_jpms_use内部未命名模块@0x3f07b12c
Mockito 实际上有一个 Automatic-Module-Name 但被视为未命名的模块,因为所有 jar 都在一个大的“未命名模块”的类路径中找到。
虽然我可以从受包保护的包迁移到非导出包,但我不明白如何解决使我的接口/类对其他模块不可见的问题?
[edit] 一个月后更新插件/依赖的版本,没有结果。
【问题讨论】:
标签: java mockito maven-3 java-module java-10