Я хочу использовать некоторые асинхронные CompletionStage
операции в методе бизнес-логики, используя методы из класса CompletableFuture
. Цепные звонки:
return CompletableFuture.runAsync(() -> firstOperation(), executor)
.thenRunAsync(() -> secondOperation(), executor)
.thenApplyAsync(none -> new MessageDTO("OK"), executor)
.join();
При написании модульных тестов для метода, который заканчивается приведенным выше фрагментом, я заметил, что модульный тест блокируется бесконечно. Я пробовал несколько подходов, чтобы обойти / избежать блокировки ( this является одним из них, @Mock
-ing и @Spy
-ing Executor
-ing объект), но безрезультатно.
Есть несколько аспектов, которые ускользают от меня:
- откуда берется блокировка? это из класса
CompletableFuture
или из Mockito?
- почему блокировка выполняется только в модульном тесте, а не в методе обслуживания?
Использованные библиотеки:
- Spring Boot v2.1.2 и Spring Framework v5.1.4
- Mockito v2.23
- JUnit Jupiter v5.3.2