2016-12-27 2 views
0

Mono.delayStepVerifierでテストしようとしています。 私のコードは次の通りである:StepVerifierを使用したMono.delayのテスト

Mono[Long] mono = Mono.delay(Duration.ofDays(5)); 

StepVerifier.withVirtualTime(() -> mono) 
    .thenAwait(Duration.ofDays(5)) 
    .expectNextCount(1) 
    .expectComplete() 
    .verify(); 

そして、私はソースコードをトレースした後、次のスタックトレース

expectation "expectNextCount" failed (expected: count = 1; actual: counted = 0; signal: onError(reactor.core.Exceptions$BubblingException: 
java.util.concurrent.RejectedExecutionException: Scheduler unavailable)) 
java.lang.AssertionError: expectation "expectNextCount" failed (expected: count = 1; actual: counted = 0; signal: onError(reactor.core.Exceptions$BubblingException: java.util.concurrent.RejectedExecutionException: Scheduler unavailable)) 
at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:1679) 
at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:1675) 
at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.checkCountMismatch(DefaultStepVerifierBuilder.java:886) 
at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignalCount(DefaultStepVerifierBuilder.java:1112) 
at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:963) 
at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:727) 
at reactor.core.publisher.MonoDelay.subscribe(MonoDelay.java:59) 
at reactor.test.DefaultStepVerifierBuilder$DefaultStepVerifier.verify(DefaultStepVerifierBuilder.java:532) 
at reactor.test.DefaultStepVerifierBuilder$DefaultStepVerifier.verify(DefaultStepVerifierBuilder.java:508) 

を取得しています、執行が法にシャットダウンされているようだSchedulers.setFactory

私はここで何かを逃しているのだろうかと思っています。

答えて

1

[OK]を、私は問題の底になっていると思う。

StepVerifierにはSupplierが必要ですが、私の場合はMono[Long]には既に作成されているMonoが添付されています。 私の代わりにMonoが最初に作成されません提供される次の

StepVerifier.withVirtualTime(() -> Mono.delay(Duration.ofDays(5))) 
    .thenAwait(Duration.ofDays(5)) 
    .expectNextCount(1) 
    .expectComplete() 
    .verify(); 

この方法をやってなければならないし、executorがシャットダウンされません。

+0

あなたはまさに正しいです!初期解決の問題は、ステップベリファイアが仮想時間スケジューラを設定する前に、実際のスケジューラでMonoがすでに作成されていることです –

関連する問題