Mockito无法Mock ServiceLocator类问题求助(附依赖与栈信息)
解决Mockito无法Mock静态类(Java17 + ByteBuddy版本不兼容)
问题核心
你遇到的MockitoException根源是ByteBuddy 1.14.5不支持Java17的类文件主版本61,同时存在Mockito组件版本不一致(mockito-core:5.4.0与mockito-inline:5.2.0)的问题,双重冲突导致静态类Mock失败。
解决方案
1. 统一Mockito依赖版本并移除冗余依赖
Mockito的mockito-inline模块已经包含mockito-core的全部功能,且会自动引入兼容版本的ByteBuddy和Objenesis,无需手动指定这些依赖。修改Gradle依赖如下:
// 移除所有旧的Mockito、ByteBuddy、Objenesis依赖,替换为统一版本的mockito-inline testImplementation 'org.mockito:mockito-inline:5.4.0'
2. 清理并重新构建项目
执行Gradle命令清理缓存并重新构建,确保依赖完全更新:
./gradlew clean build --refresh-dependencies
额外检查项
- 确认
ServiceLocator类不是final修饰的:即使使用mockito-inline,也无法Mockfinal静态类(若确为final类,需调整代码结构或使用PowerMock等替代方案)。 - 检查依赖树是否存在冲突:运行
./gradlew dependencies查看依赖树,若发现旧版本ByteBuddy/Mockito,需在对应依赖中通过exclude排除冲突项。
内容的提问来源于stack exchange,提问作者Asrivast
相关产品推荐
相关产品推荐

