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

Spring Boot内置Mockito在OpenJDK 11环境下无法附着JVM问题求解

根因分析
  • 你使用的Mockito 3.9.0内置的Byte Buddy 1.10.x版本未适配Apple M1芯片架构下的JVM自附着逻辑,默认会尝试启动外部进程完成代理挂载
  • macOS 12对进程间调试挂载权限做了更严格的限制,即便配置了防火墙、JVM附着参数,外部进程的挂载请求依然会被系统安全机制拦截
  • 你之前添加的-Djdk.attach.allowAttachSelf=true参数未生效,是因为旧版本Byte Buddy不会优先使用JVM内部自附着能力,依然会走外部进程挂载逻辑
解决方案

方案1:升级Byte Buddy依赖(优先推荐,无功能损失)

在项目pom.xml的dependencyManagement节点中手动指定更高版本的Byte Buddy,兼容现有Spring Boot和Mockito版本,无需修改其他代码:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy</artifactId>
            <version>1.12.18</version>
        </dependency>
        <dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy-agent</artifactId>
            <version>1.12.18</version>
        </dependency>
    </dependencies>
</dependencyManagement>

升级后保留之前添加的-Djdk.attach.allowAttachSelf=true参数即可正常运行测试。

方案2:更换Mockito MockMaker实现(无需改依赖,有功能限制)

如果你的单元测试没有mock final类、静态方法、私有方法的需求,可以切换Mockito的mock实现来规避Byte Buddy的挂载问题:
在src/test/resources目录下创建路径META-INF/mockito-extensions,新建文件org.mockito.plugins.MockMaker,写入以下内容:

mock-maker-subclass

该方案不需要修改任何依赖,适配所有JDK版本,缺点是不支持inline mock maker的高级特性。

方案3:修复macOS权限配置

如果上述方案都未生效,检查系统权限配置:

  • 打开「系统设置 > 隐私与安全性 > 开发者工具」
  • 勾选你运行测试所用的终端(Terminal/iTerm2等)、IDE(IntelliJ IDEA等)的权限
  • 重启终端/IDE后重新运行测试

内容的提问来源于stack exchange,提问作者quiram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:04