Mockito verify校验方法未执行时times(0)不生效问题求助
Mockito校验方法未执行不生效问题排查方案
Mockito原生支持times(0)校验指定方法未调用,校验未生效通常是以下原因导致:
- 校验目标不是Mock/Spy对象
verify仅支持作用于Mockito生成的Mock对象、或@Mock/@Spy注解标注且完成初始化的对象,普通业务实例调用verify不会生效。如果使用注解声明Mock对象,需确保测试类添加了JUnit适配配置:JUnit5环境加@ExtendWith(MockitoExtension.class)注解,JUnit4环境加@RunWith(MockitoJUnitRunner.class)注解,也可以手动执行MockitoAnnotations.openMocks(this)完成Mock对象初始化。 - 方法入参不匹配
如果待校验的test()方法存在入参,verify中传入的入参与业务代码实际调用的入参不一致时,会导致times(0)校验不触发。如果不需要校验入参具体值,可以使用Mockito内置的任意匹配器,例如any()、anyString()、anyLong()等。
示例:若test()方法需要传入String类型入参,写法调整为verify(updateRule, times(0)).test(anyString())即可。 - 校验执行顺序错误
verify校验必须在业务逻辑执行完成后调用,若先执行校验再执行业务工作流,自然无法覆盖到后续的方法调用。
另外你也可以使用Mockito提供的可读性更高的等价写法替代times(0):
verify(updateRule, never()).test();
内容的提问来源于stack exchange,提问作者SWEngineer12
相关产品推荐
相关产品推荐

