Mockito中verify方法的times(1)与atMostOnce()的区别是什么?
Mockito中times(1)与atMostOnce()的区别
核心行为差异
times(1):要求目标方法必须被恰好调用1次。只要实际调用次数是0次或≥2次,验证就会失败。atMostOnce()(等价于atMost(1)):要求目标方法调用次数不超过1次,也就是0次或1次都符合验证要求,只有当调用次数≥2次时才会验证失败。
内部实现逻辑区别
二者都是Mockito中VerificationMode接口的实现类:
times(1)对应Times类,内部会校验实际调用次数是否严格等于传入的次数(这里是1)。atMostOnce()对应AtMost类,内部会校验实际调用次数是否小于等于传入的次数(这里是1)。
示例代码对比
场景1:方法未被调用时
CalculatorService calculatorService = mock(CalculatorService.class); // 未执行calculatorService.add(10.0, 20.0) // 测试逻辑... // 使用times(1):验证失败,因为实际调用次数为0≠1 verify(calculatorService, times(1)).add(10.0, 20.0); // 使用atMostOnce():验证通过,因为实际调用次数0≤1 verify(calculatorService, atMostOnce()).add(10.0, 20.0);
场景2:方法被调用2次时
CalculatorService calculatorService = mock(CalculatorService.class); // 执行两次add调用 calculatorService.add(10.0, 20.0); calculatorService.add(10.0, 20.0); // 测试逻辑... // 两种方式都会验证失败,因为实际调用次数2>1 verify(calculatorService, times(1)).add(10.0, 20.0); verify(calculatorService, atMostOnce()).add(10.0, 20.0);
内容的提问来源于stack exchange,提问作者Krutik Gadhiya
相关产品推荐
相关产品推荐

