でFlux.take(継続期間を)私は春の炉心3.0.6を使用していますが、私はフラックスを返すメソッドを持っています。ユニットテストStepVerifier
public Flux<Foo> createFlux(){
return Flux.<List<Foo>,String>generate(/* generator omitted for clarity's sake */)
.take(Duration.ofSeconds(10)
.flatMap(Flux::fromIterable);
}
ジェネレータ関数はにページ番号付きのREST APIを呼び出します結果を取得し、APIがデータを返し続けている場合は、Fluxを10秒間実行します。
単体テストを作成したいのですが、Fluxが最大10秒間だけ動作することを確認するテストを作成するのに問題があります。
私はそれは常にデータを返すように、RESTサービスを嘲笑し、この書いた:
StepVerifier.withVirtualTime(() -> createFlux())
.thenAwait(Duration.ofSeconds(10))
.verifyComplete();
を、それは失敗します。
java.lang.AssertionError: expectation "expectComplete" failed (expected: onComplete(); actual: onNext([my toString() Foo bean]))
私はいくつかの方法で生成されたアイテムを消費する必要があることを推測し、私はそうするために正しいStepVerifierメソッドを見つけることができません。私はthenConsumeWhile
を持つすべての項目をスキップしようと
EDIT
:
StepVerifier.withVirtualTime(() -> createFlux())
.thenAwait(Duration.ofSeconds(10))
.thenConsumeWhile(t -> true)
.verifyComplete();
が、今のテストだけで無期限に実行され、決して終わりません。
ありがとう、それ確かに働いた。私は '.verifyComplete()'の代わりに '.expectComplete()。verify(Duration.ofSeconds(10L))'を使います。このようにして、フラックスが10秒を超えて実行されると、アサーションエラーが発生します。 verifyCompleteを使用すると、無限に実行されます。フラックスが予想される10秒間に実行される場合、両方の解決策は問題ありません。 – dipanda