Написание модульных тестов для потоков Java 8 - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть список, и я передаю его в потоковом режиме, чтобы получить некоторые отфильтрованные данные как:

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()?

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете смоделировать только одиночные вызовы методов, а не целые плавные каскады интерфейса.

Например, вы можете сделать

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 это действительноне стоит издеваться над всем этим, просто убедитесь, что все фильтры были вызваны, и проверьте содержимое списка результатов.

...