You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:45:38