如何让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
相关产品推荐
相关产品推荐

