使用Mockito 3.12.4 mock HttpClient 4.5.5触发NoSuchMethodError如何解决
问题根因
该错误本质是ByteBuddy版本冲突,和HttpClient本身的类属性无关(HttpClient是公共接口,完全符合Mockito的mock要求),外层抛出的MockitoException属于底层错误触发的上层误导性提示:
- Mockito 3.12.4 依赖ByteBuddy 1.11.13版本,报错的
appendMostSpecific方法是该版本新增的API - 你的项目中存在其他依赖引入了更低版本的ByteBuddy,运行时JVM优先加载了低版本ByteBuddy类,找不到对应方法就会抛出
NoSuchMethodError,最终导致Mockito创建mock对象失败
解决方案
方案1:强制指定ByteBuddy版本
统一ByteBuddy版本到Mockito 3.12.4要求的1.11.13及以上兼容版本即可。
Maven项目可在pom.xml的dependencyManagement节点添加强制配置:
<dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</artifactId> <version>1.11.13</version> <scope>test</scope> </dependency> <dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy-agent</artifactId> <version>1.11.13</version> <scope>test</scope> </dependency>
Gradle项目可在build.gradle中添加强制版本规则:
configurations.all { resolutionStrategy.force 'net.bytebuddy:byte-buddy:1.11.13' resolutionStrategy.force 'net.bytebuddy:byte-buddy-agent:1.11.13' }
方案2:升级依赖版本
将Mockito升级到最新稳定版,同时排查项目中引入低版本ByteBuddy的第三方依赖,将对应依赖升级到兼容高版本ByteBuddy的版本,彻底解决版本冲突问题。
内容的提问来源于stack exchange,提问作者fmpdmb
相关产品推荐
相关产品推荐

