已引入mockito-inline依赖仍无法用Mockito mock静态方法如何解决?
问题原因
你当前运行时Mockito加载的是默认的SubclassByteBuddyMockMaker实现,该实现不支持静态方法Mock。即使引入了mockito-inline依赖,也可能因为IDE缓存、依赖加载顺序、父项目依赖覆盖等原因,导致inline mock maker没有被启用。
解决方案按优先级依次尝试:
方案1:清理项目缓存并重建
执行maven构建命令mvn clean install -DskipTests,然后重启IDE并清除IDE缓存(IDEA可以通过File → Invalidate Caches...操作),重新运行测试。大部分场景下都是依赖加载缓存导致的问题,该操作可以解决80%以上的同类问题。方案2:手动强制指定MockMaker实现
若清理缓存后仍报错,手动添加配置强制启用inline mock maker:- 在项目的
src/test/resources目录下新建mockito-extensions文件夹 - 在该文件夹下新建名为
org.mockito.plugins.MockMaker的纯文本文件 - 文件内只写入一行内容:
mock-maker-inline
配置完成后重新运行测试即可。
- 在项目的
方案3:测试代码优化(可选但建议)
MockedStatic实例需要主动关闭,否则会作用于整个JVM生命周期,影响其他测试用例的执行,建议用try-with-resources包裹静态Mock逻辑,修改后的测试代码如下:@RunWith(MockitoJUnitRunner.class) public class TokenTest { @Test public void mockStatic() { try (MockedStatic<FakeTokenUtil> mock = Mockito.mockStatic(FakeTokenUtil.class)) { mock.when(FakeTokenUtil::getToken).thenReturn("666666"); System.out.println(FakeTokenUtil.getToken()); } } }
内容的提问来源于stack exchange,提问作者william
相关产品推荐
相关产品推荐

