Как проверить с помощью StepVerifier, что Mono не завершен? - PullRequest
2 голосов
/ 21 октября 2019

С StepVerifier очень легко проверить, завершено ли Mono (просто методом expectComplete() в StepVerifier), но что мне делать, если нужно проверить противоположный случай?

Я пытался использовать этот подход:

    @Test
    public void neverMonoTest() {
        Mono<String> neverMono = Mono.never();
        StepVerifier.create(neverMono)
            .expectSubscription()
            .expectNoEvent(Duration.ofSeconds(1))
            .thenCancel()
            .verify();
    }

и такие тесты пройдены. Но это ложноположительный результат, потому что, когда я заменяю Mono.never() на Mono.empty(), тест все еще зеленый.

Есть ли лучший и надежный способ проверить отсутствие завершения Mono (конечно, в заданный промежуток времени? )?

1 Ответ

1 голос
/ 23 октября 2019

Похоже, что вы сталкиваетесь с ошибкой в ​​реакторном тесте , и, к сожалению, ошибка, которая не будет решена в ближайшее время:

Из-за моейпамять, которая была постоянным недостатком в конструкции реактора-испытания. Скорее всего, это будет исправлено после того, как тестирование реактора будет переписано с нуля / значительно.

Снижение версии до 3.1.2, похоже, решает проблему, но это довольно низкий рейтинг. Единственный другой обходной путь, о котором я знаю, был , опубликованный PyvesB здесь , и включает ожидание истечения времени ожидания Mono:

Mono<String> mono = Mono.never();
StepVerifier.create(mono.timeout(Duration.ofSeconds(1L)))
        .verifyError(TimeoutException.class);

Когда выйдет следующий релиз, тогда Вы должны быть в состоянии сделать :

Mono<String> mono = Mono.never();
StepVerifier.create(mono)
        .expectTimeout(Duration.ofSeconds(1));

... в качестве более краткой альтернативы.

...