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

如何让Mockito mock调用方法时按列表顺序返回多个不同值

Mockito 多调用顺序返回值实现方案

Mockito 原生已经提供了对应能力,完全不需要自行编写循环拼接stub的工具方法。

  • 固定多返回值场景:thenReturn 本身支持可变参数,传入的多个值会按照调用顺序依次返回,不需要手动链式调用多个thenReturn
    示例代码:
    @Test
    void test() {
        A mock = Mockito.mock(A.class);
        // 按调用顺序依次返回1、2、3
        Mockito.when(mock.getVal()).thenReturn(1, 2, 3);
        System.out.println(mock.getVal()); // 打印1
        System.out.println(mock.getVal()); // 打印2
        System.out.println(mock.getVal()); // 打印3
    }
    
  • 返回值预存在List中的场景:不需要循环遍历拼接,直接将List转为数组传入thenReturn即可
    示例代码:
    List<Integer> returnValues = List.of(1,2,3);
    Mockito.when(mock.getVal()).thenReturn(returnValues.toArray(new Integer[0]));
    

补充说明:如果方法实际调用次数超过传入的返回值个数,后续所有调用会持续返回最后一个传入的值。比如上述示例中第四次调用getVal()时,依然会返回3。
如果需要实现更复杂的序列逻辑(比如穿插抛出异常、根据入参动态计算返回值),可以使用thenAnswer配合迭代器实现,但对于固定序列返回的场景,直接使用原生thenReturn的可变参数能力是最简洁、最符合Mockito设计的写法,比自定义工具方法更稳定可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:36:19