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 ответ

Решение
  1. Может быть provider.getAuthor() не возвращает значения (a Mono.empty()) когда вы запускаете свой тест?

    А flatMapнужно значение для работы. Если значение отсутствует, оно не будет вызываться. Вы можете добавитьdoOnComplete() вызовите и посмотрите, сработает ли он, когда последовательность завершится.

    Веб-приложение и тест работают с одними и теми же данными?

  2. "Ничего не происходит, пока вы не подпишетесь"

    Вы можете добавить doOnSubscribe() позвоните и посмотрите, срабатывает ли он и когда, при запуске теста.

Другие вопросы по тегам