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

