Как бы я проверил логику событий еще не из RxJava с Project Reactor Stepverifier? - PullRequest
0 голосов
/ 29 июня 2018

Я сейчас пытаюсь выяснить, как сделать аналогичный тест в Project Reactor. По сути, я хочу убедиться, что перед подключением не происходит никаких событий.

@Test
void connectable() {
    Observable<String> provider = Observable.just("Test1", "Test2");
    ConnectableObservable<String> connectable = provider.publish();
    TestObserver<String> testSubscriber = connectable.test();
    testSubscriber.assertEmpty();
    connectable.connect();
    testSubscriber.assertResult("Test1", "Test2").assertComplete();
}

Это моя текущая попытка, но она не верна, как мне заставить это работать?

@Test
void connectable() {
    Flux<String> provider = Flux.just("Test1", "Test2");
    ConnectableFlux<String> connectable = provider.publish();
    FirstStep<String> tester = StepVerifier.create(connectable).expectNoEvent(Duration.ofMinutes(1));
    connectable.connect();
    tester.expectNext("Test1", "Test2").expectComplete().verify();
}

1 Ответ

0 голосов
/ 29 июня 2018

Ты почти у цели. StepVerifier проверяет последовательность в целом, и вы не можете добавить императивные утверждения в середине. Но вы можете делать свои утверждения и звонки с изменением состояния в пределах StepVerifier! Для этого используйте then(Runnable):

@Test
public void stepVerifierTestConnect() {
    Flux<String> provider = Flux.just("Test1", "Test2");
    ConnectableFlux<String> connectable = provider.publish();

    StepVerifier.create(connectable)
                .expectSubscription() //expectNoEvent counts the subscription as an event
                .expectNoEvent(Duration.ofSeconds(3))
                .then(connectable::connect)
                .expectNext("Test1", "Test2")
                .expectComplete()
                .verify();
}

Обратите внимание на expectSubscription в первую очередь. Это позволяет избежать взрыва expectNoEvent, потому что он рассматривает акт подписки как событие (и все еще существует подписка на сам ConnectableFlux - он просто запрещает подписку на свой собственный апстрим до тех пор, пока вы не вызовете connect()).

...