我有一个列表,我正在流式传输此列表以获取一些过滤数据,如下所示:
List<Future<Accommodation>> submittedRequestList =
list.stream().filter(Objects::nonNull)
.map(config -> taskExecutorService.submit(() -> requestHandler
.handle(jobId, config))).collect(Collectors.toList());
我编写测试时,尝试使用when()
返回一些数据:
List<Future<Accommodation>> submittedRequestList = mock(LinkedList.class);
when(list.stream().filter(Objects::nonNull)
.map(config -> executorService.submit(() -> requestHandler
.handle(JOB_ID, config))).collect(Collectors.toList())).thenReturn(submittedRequestList);
我遇到org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
LinkedList$$EnhancerByMockitoWithCGLIB$$716dd84d cannot be returned by submit()
错误。如何使用正确的when()
解决此错误?
答案 0 :(得分:5)
您只能模拟单个方法调用,不能模拟整个流畅的接口级联。
例如,您可以
Stream<Future> fs = mock(Stream.class);
when(requestList.stream()).thenReturn(fs);
Stream<Future> filtered = mock(Stream.class);
when(fs.filter(Objects::nonNull).thenReturn(filtered);
以此类推。
IMO这真的不值得模拟整个过程,只需验证是否调用了所有过滤器并检查结果列表的内容即可。