【发布时间】:2018-12-17 09:42:22
【问题描述】:
我有一个列表,我正在流式传输此列表以获取一些过滤后的数据:
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() 解决此错误?
【问题讨论】:
-
模拟流真的没有意义。有一条规则,你不应该嘲笑不属于你的东西。实施可能会在一段时间内发生变化,并且测试会失败,因为您不是在测试行为,而是在测试细节。想象一下,如果你想先写一个测试,你怎么写这个测试?你会假设你必须在那里使用流吗?
-
另外,你为什么要嘲笑一个
LinkedList?只需使用真实的实现。new LinkedList<>()。砰,完成。行为完全正确。