You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:25:17