使用Mockito验证静态方法调用:MockedStatic过时verify方法替代方案
基于Mockito的静态方法调用验证解决方案
错误原因说明
你查到的verify(dummyStatic).myPublicStaticFunc(anyInt)是普通实例对象的mock验证写法,不适用于静态mock场景:MockedStatic代理对象本身没有定义目标类的静态方法,直接调用会报方法不存在错误。
正确替换写法
Mockito 4.x及以上版本仅调整了MockedStatic#verify方法的参数顺序,原有功能并未移除:原已标记过时的verify(VerificationMode mode, Verification verification)重载,替换为verify(Verification verification, VerificationMode mode)重载,默认验证调用次数为1次时可以省略times(1)参数。
修改后的代码示例如下:
try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) { dummyStatic.when(() -> SomePublicClass.myPublicStaticFunc(anyInt())) .thenReturn(5); // 执行业务逻辑 System.out.println(SomePublicClass.myPublicStaticFunc(7)); // 验证写法1:明确指定调用次数 dummyStatic.verify( () -> SomePublicClass.myPublicStaticFunc(anyInt()), times(1) ); // 验证写法2:验证调用1次可省略次数配置,更简洁 // dummyStatic.verify(() -> SomePublicClass.myPublicStaticFunc(anyInt())); }
必要依赖配置
静态mock能力依赖Mockito的InlineMockMaker实现,必须引入mockito-inline依赖替代默认的mockito-core,Maven配置参考:
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-inline</artifactId> <version>5.6.0</version> <scope>test</scope> </dependency>
Gradle配置参考:
testImplementation 'org.mockito:mockito-inline:5.6.0'
内容的提问来源于stack exchange,提问作者Gyanendra Singh
相关产品推荐
相关产品推荐

