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

如何捕获Mock对象所有调用的全部传入参数?

捕获Mock对象多次调用的全部传入参数

假设你使用的是Mockito框架,要捕获myServiceMock.myMethod所有调用的传入参数,可按以下步骤操作:

  • 创建参数捕获器
    声明对应myMethod参数类型的ArgumentCaptor,比如方法接收的参数类型为MyParam,代码如下:

    ArgumentCaptor<MyParam> paramCaptor = ArgumentCaptor.forClass(MyParam.class);
    
  • 验证调用并捕获参数
    在执行完stream的map操作后,用Mockito的verify方法配合捕获器,捕获所有调用的参数:

    // 验证myMethod的调用次数,这里用集合大小匹配遍历次数更严谨
    verify(myServiceMock, times(myCollection.size())).myMethod(paramCaptor.capture());
    

    若不确定调用次数,可将times(N)替换为atLeastOnce()或anyNumber()。

  • 获取所有捕获的参数
    通过捕获器的getAllValues()方法,就能拿到所有调用的参数列表,列表顺序与stream元素的处理顺序一致:

    List<MyParam> allCapturedParams = paramCaptor.getAllValues();
    // 后续可对列表做断言或其他验证操作
    

完整示例代码

// 初始化Mock对象
MyService myServiceMock = Mockito.mock(MyService.class);

// 执行测试逻辑
List<MyParam> myCollection = Arrays.asList(new MyParam("param1"), new MyParam("param2"));
myCollection.stream()
            .map(myServiceMock::myMethod)
            .collect(Collectors.toList());

// 捕获并验证参数
ArgumentCaptor<MyParam> paramCaptor = ArgumentCaptor.forClass(MyParam.class);
verify(myServiceMock, times(2)).myMethod(paramCaptor.capture());

List<MyParam> capturedParams = paramCaptor.getAllValues();
assertEquals("param1", capturedParams.get(0).getContent());
assertEquals("param2", capturedParams.get(1).getContent());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:02:43