运行Mockito测试时报net.bytebuddy.agent.ByteBuddyAgent类缺失错误如何解决
报错原因
该错误核心是项目运行时类路径缺失Byte Buddy Agent依赖:
- 你当前启用了Mockito的InlineByteBuddyMockMaker实现(通常用于支持mock final类、静态方法、构造方法等高级特性),该实现强依赖
net.bytebuddy.agent.ByteBuddyAgent类,依赖缺失就会触发ClassNotFoundException。 - 错误提示里提到的JDK agent挂载机制异常是依赖缺失后的衍生提示,你使用的Oracle JDK 1.8本身完全支持agent挂载能力,不存在JDK层面的问题。
- 后续的MockMaker加载失败是前序类找不到导致的连锁异常。
可行解决方案
根据你的使用场景选择以下任意一种方案即可:
- 方案1:补充Byte Buddy Agent依赖
如果你需要保留Inline MockMaker的高级特性,直接在构建配置中添加对应版本的byte-buddy-agent依赖即可,注意版本要和你当前Mockito依赖的Byte Buddy版本保持一致,避免兼容性问题。
Maven配置示例:
Gradle配置示例:<dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy-agent</artifactId> <version>1.12.23</version> <scope>test</scope> </dependency>testImplementation 'net.bytebuddy:byte-buddy-agent:1.12.23' - 方案2:切换为默认MockMaker实现
如果你不需要mock final类、静态方法这类高级特性,直接切回Mockito默认的子类生成MockMaker即可,不需要额外依赖。
操作方法:找到项目test/resources/META-INF/services/org.mockito.plugins.MockMaker配置文件,删除里面的org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker配置,或者将配置内容替换为org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker。 - 方案3:直接使用mockito-inline整合依赖
Mockito 3.5及以上版本提供了开箱即用的mockito-inline依赖,已经内置了byte-buddy-agent和Inline MockMaker的自动配置,不需要额外手动配置依赖和MockMaker文件。引入该依赖后不需要再单独引入mockito-core,避免版本冲突。
Maven配置示例:
Gradle配置示例:<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-inline</artifactId> <version>4.11.0</version> <scope>test</scope> </dependency>testImplementation 'org.mockito:mockito-inline:4.11.0'
内容的提问来源于stack exchange,提问作者tinner-ping
相关产品推荐
相关产品推荐

