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

Mockito中实现前29次调用doNothing、第30次抛异常的方法

解决Mockito指定Stubbing调用次数的问题

不用手动写29次doNothing()啦,Mockito本身就提供了优雅的方式来指定不同调用次数对应的行为,完全不需要重复代码。

先说说你原来写法的问题:when(dao, times(30))这种语法是错误的,Mockito的when方法并不接受times()作为第二个参数,正确的Stubbing逻辑应该通过链式调用的方式来组合次数和行为。

正确的实现代码

@Mock
DAOclass dao;

@Test(expected = ArithmeticException.class)
public void AAA() throws SQLException {
    // 核心写法:指定前29次调用methodABC时执行doNothing,第30次抛出异常
    doNothing().times(29).doThrow(ArithmeticException.class).when(dao).methodABC();
    
    for (int i = 0; i < 30; i++) {
        dao.methodABC(); // 注意:你原来写的dao.nothing()应该是笔误,要调用Stubbing的目标方法
    }
}

原理说明

Mockito的Stubbing API支持链式调用:

  • doNothing()定义了默认的行为(什么都不做)
  • .times(29)指定这个行为会被触发29次
  • 之后的.doThrow(ArithmeticException.class)会在第30次调用methodABC时生效

这样既满足了你的需求,又保持了代码的简洁性,完全不用手动重复写29次doNothing()。另外还要注意循环里的方法调用要和Stubbing的方法一致,不然Stubbing的规则不会生效哦。

内容的提问来源于stack exchange,提问作者user7968180

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:15