Убедитесь, что по крайней мере какое-то время прошло с помощью StepVerifier? - PullRequest
0 голосов
/ 08 февраля 2019

Я использую реактор-тест проект и StepVerifier , чтобы проверить мою функцию, myFunc, которая возвращает Flux<Result>:

Flux<Result> results = myFunc()

StepVerifier.create(results). ..

Внутренне myFunc использует ограничитель скорости из resilience4j , и я хочу убедиться, что по крайней мере должна пройти некоторая длительность до завершения потока, используяStepVerifier.

Как я могу сделать это с StepVerifier?

Обновление 1:

Обратите внимание, что myFunc() делает реальные вызовы (поддельные) http-сервер, работающий локально в целях тестирования.Поэтому я думаю, что установка виртуального времени невозможна.

Обновление 2:

В качестве примера скажем, что myFunc() делает 30 запросов с ограничением скоростинастроен на 10 об / мин, поэтому я ожидаю, что подписка продлится чуть более 3 секунд.Т.е. я хочу убедиться, что было сделано 30 запросов (expectNextCount(30)) и что должно пройти определенное количество времени (3 с).

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

То, что вы ищете, это expectNoEvent(Duration).Обратите внимание, что подписка - это событие, которое (почти) всегда происходит, поэтому для пустой последовательности у вас должно быть что-то вроде:

StepVerifier.create(result)
    .expectSubscription()
    .expectNoEvent(Duration.ofMillis(100))
    .verifyComplete();
0 голосов
/ 11 июня 2019

verify() возвращает объект Duration, отмечающий фактическую продолжительность проверки.Таким образом, вы можете проверить, сколько времени это заняло.

Однако, похоже, что он не учитывает withVirtualTime - он все равно будет возвращать фактическую продолжительность проверки, а не виртуальное время, что делает его намного менее полезным.

0 голосов
/ 08 февраля 2019

Для меня это звучит так, как будто метод thenAwait (Duration timeshift) - это то, что вы ищете.

StepVerifier.Step<T> thenAwait(Duration timeshift)
Pause the expectation evaluation for a given Duration. If a VirtualTimeScheduler has been configured, VirtualTimeScheduler.advanceTimeBy(Duration) will be used and the pause will not block testing or Publisher thread.
...