Junit 如何使用ProjectReactor Stepverifier从RxJava测试无事件逻辑?

Junit 如何使用ProjectReactor Stepverifier从RxJava测试无事件逻辑?,junit,project-reactor,Junit,Project Reactor,我目前正试图弄清楚,如何在ProjectReactor中进行类似的测试。 基本上,我想确保在连接之前不会发生任何事件 @Test void connectable() { Observable<String> provider = Observable.just("Test1", "Test2"); ConnectableObservable<String> connectable = provider.publish(); TestObserve

我目前正试图弄清楚,如何在ProjectReactor中进行类似的测试。 基本上,我想确保在连接之前不会发生任何事件

@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();
}
@测试
void可连接(){
可观察的提供者=可观察的.just(“Test1”、“Test2”);
ConnectableObservable connectable=provider.publish();
TestObserver 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();
}
@测试
void可连接(){
Flux provider=Flux.just(“Test1”、“Test2”);
ConnectableFlux connectable=provider.publish();
FirstStep tester=StepVerifier.create(可连接).expectNoEvent(持续时间为分钟(1));
connectable.connect();
tester.expectNext(“Test1”、“Test2”).expectComplete().verify();
}

你就快到了<代码>步进器< /代码>作为一个整体测试序列,不能在中间添加命令断言。但是您可以在
步骤验证程序中进行断言和状态修改调用
!为此,请使用
然后(Runnable)

@测试
public void stepVerifierTestConnect(){
Flux provider=Flux.just(“Test1”、“Test2”);
ConnectableFlux connectable=provider.publish();
StepVerifier.create(可连接)
.expectSubscription()//expectNoEvent将订阅计数为事件
.expectNoEvent(持续时间为秒(3))
.then(可连接::连接)
.expectNext(“测试1”、“测试2”)
.expectComplete()
.verify();
}
首先请注意
expectSubscription
。这避免了
expectNoEvent
爆炸,因为它将订阅行为视为一个事件(并且仍然存在对
ConnectableFlux
本身的订阅-它只是在调用
connect()
之前阻止订阅自己的上游)

@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();
}