web-dev-qa-db-ja.com

Spring WebFlux、MonoとFluxのユニットテスト

リアクティブプログラミングに興味があったので、 リアクティブRESTful Webサービスの構築 ガイドで少し遊んだ。そして、forwradを動かして、いくつかのユニットテストを追加したかった。

ハンドラー(RouterFunction)をプレーンなJunit/Mockitoテストでテストしようとしました。ただし、リアクティブであるため、ハンドラーは_Mono<ServerResponse>_を返します。そのため、ServerResponseステータスをテストするためにblock()する必要がありましたが、テストするために彼の体を抽出することができませんでした。 Webで解決策を検索しているときに、すべてのサンプルがWebTestClientを使用しているようです。

私の質問は:

すべてのサンプルがWebTestClientを使用してリアクティブRESTサービスをテストし、ServerResponseの本体を(単体)テストするのは簡単ではないことを考えると。 RouterFunctionを単体テストすることをお勧めしますか、それとも常にWebTestClientを使用してより広範なテストを実行することをお勧めしますか?

どうもありがとう。

4
gervais.b

ベストプラクティスはWebTestClientを使用することのようです。ただし、これはサーバーを実行しなくても使用できます。

spring-testモジュールには、WebFluxサーバーエンドポイントのテストに使用できるWebTestClientが含まれています実行中のサーバーの有無にかかわらず

- https://docs.spring.io/spring/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/html/web-reactive.html#web-reactive-tests

4
gervais.b

プロジェクトリアクターによると、テストの出力を消費するためにStepVerifierを使用する必要があります。あなたはそれについての良い説明を見つけることができます ここ そしてソースは ここ です。

1
nekperu15739