JDK17下JUnit初始化报错:org.objenesis.ObjenesisException求助
解决JDK17下PowerMockito 1.7.4 + Mockito 1.10.19测试初始化错误
问题根源
你使用的PowerMockito 1.7.4和Mockito 1.10.19都是多年前的老旧版本,完全未适配JDK17的模块化架构与反射访问限制。报错中的ObjenesisException本质是JDK17收紧了对SunReflectionFactory这类内部API的访问权限,老版本框架无法正常创建对象实例。
具体解决方案
升级核心框架版本:
直接将PowerMockito升级至2.0.9及以上(推荐使用最新稳定版),Mockito对应升级至3.12.4及以上——PowerMockito 2.x与Mockito 3.x/4.x兼容,且这些版本已适配JDK17的规则。添加JVM启动参数:
即使升级框架后,仍需给测试VM添加参数以绕过模块访问限制:--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED替换为Mockito原生API(可选):
如果你的测试未用到PowerMock独有的静态方法/私有方法Mock功能,建议直接使用最新版Mockito——Mockito从3.x版本开始已覆盖大部分PowerMock的场景,对高版本JDK兼容性更好,也更轻量。升级Objenesis依赖:
PowerMockito依赖Objenesis,需确保使用3.2及以上版本(该版本开始支持JDK16+)。若依赖管理工具未自动拉取兼容版本,手动指定:
Maven配置:<dependency> <groupId>org.objenesis</groupId> <artifactId>objenesis</artifactId> <version>3.3</version> <scope>test</scope> </dependency>Gradle配置:
testImplementation 'org.objenesis:objenesis:3.3'确认JUnit4版本:
将JUnit4升级至4.13.2及以上,该版本修复了与高版本JDK的类加载兼容问题。
内容的提问来源于stack exchange,提问作者Bhavitha
相关产品推荐
相关产品推荐

