Mono.then() не выполняется в тестах
Я пытаюсь протестировать следующий код с помощью интеграционных тестов:
return ((Mono<Object>) joinPoint.proceed()).then(provider.getAuthor().flatMap((author) -> {
Arrays.stream(joinPoint.getArgs())
.forEach(arg -> javers.commitShallowDeleteById(author, InstanceIdDTO.instanceId(arg.toString(), deletedEntity)));
return Mono.empty();
}));
jointPoint.proceeed()
Всегда возвращает Mono<Void>
так вот почему я использую then()
.
При запуске приложения в режиме отладки, если я помещаю точку останова внутри плоской карты, я вижу, что она проходит через нее, однако если я запустил ее в @SpringBootTest
in больше не проходит внутри плоской карты.
Конфигурация теста:
@DirtiesContext
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
Провайдер:when(authorProvider.getAuthor()).thenReturn(Mono.just("Author"));
1 ответ
Может быть
provider.getAuthor()
не возвращает значения (aMono.empty()
) когда вы запускаете свой тест?А
flatMap
нужно значение для работы. Если значение отсутствует, оно не будет вызываться. Вы можете добавитьdoOnComplete()
вызовите и посмотрите, сработает ли он, когда последовательность завершится.Веб-приложение и тест работают с одними и теми же данными?
"Ничего не происходит, пока вы не подпишетесь"
Вы можете добавить
doOnSubscribe()
позвоните и посмотрите, срабатывает ли он и когда, при запуске теста.