2017-12-15 17 views
0

'SourcePollingChannelAdapter'によってトリガーされるロジックチェーンをアサートするスプリングテストをどのように書くことができますか?私の心に来る何スプリングの統合:ポーラー依存ロジックのテスト

  • 利用のThread.sleep()本当に
  • は、私が直接のもので、すべてのポーリング可能なチャンネルを交換します春のコンテキストの別のテストバージョンをお持ちのテストのための悪い考えです。これには多くの作業が必要です。

トリガーポーラーを強制的にテストする方法はありますか?

答えて

1

通常、我々はQueueChannelを使用してテストを行い、receive(10000)メソッドを介してメッセージを待ちます。この方法では、データのソースとは無関係に、テストメソッドのスレッドは、データが到着するまでブロックされます。

SourcePollingChannelAdapterTaskSchedulerによってトリガされるため、テストフローとは別のスレッドでフロー全体のロジックが実行されます。私はチャンネルを置き換えることについてのあなたのアイデアが役に立たないことを意味します。 Thread.sleep()には値があるかもしれませんが、実際には最大10秒間しか待機しないため、QueueChannel.receive(10000)は非常に信頼性があります。

テストケースをブロックする別の方法は、CountDownLatchという標準から来ています。これは、フローのどこかでcountDown()となり、テストメソッドで待機します。

テストにはいくつかの方法があります:繰り返しの間に短いスリープ期間を持つループをいくつか持っていて、いくつかの状態をチェックして終了して確認してください。これは、最後にポーラーとデータベースの場合に役立つかもしれません。したがって、私たちは、そのループ内でSELECTを実行し、目的の状態にします。

Reference Manualに追加情報があります。

関連する問題