2016-10-19 12 views
0

私は次のようなことをしています。キューからメッセージを聞いて開始し、UTやITを処理するスプリングブートアプリケーションです。今、統合テストクラスから、入力キューに多数のメッセージを投稿すると、アプリケーションがクラッシュしないことを確認したいと思います。Mockito新しいスレッドからメソッドを何回も実行するのを待つ

このメソッドのテストでは、Mockito#spyを使用して新しいスレッドを開始するよりも、キューに接続してダミーのメッセージを投稿しています。これまでのところ、1つのメッセージに対して他のITと同様に優れています。 ArgumentCaptorを使用して、キューに送信したメッセージがアプリケーションスレッドによって正常に処理されたことを確認しています。

私が行う方法がわからないのは、何千もの処理メソッド呼び出しが実行されるのを待って、アプリケーションがクラッシュしないことを確認することです。すべてのメッセージがキューから読み取られた後で、テストは終了する必要があります(メッセージはまだ検証されていませんが、これは必須ではありません)。処理時間は1〜2時間にする必要があります。

私はCountDownLatchについて読んだことがありますが、それは実際には使用する助けとなるすべてのメッセージを処理する必要がある限り、スレッドの実行を待つ方法を理解できません。

誰でも私がここでやろうとしていることに対する実装設計を提案できますか?それとも、私がしようとしていることが可能でない可能性はありますか?

ありがとうございます!

更新: テストされたアプリケーションメソッドまたはクラスを変更することはできません。したがって、メソッドへの呼び出し回数を取得する方法はありますか?ありがとう@Mykhailo Kovalskyi

答えて

1

お試しAwaitilityこの特定のケースでは、テストケースは非同期にメッセージ処理を開始し、条件を待つためにAwaitilityを使用する必要があります。

この条件は、条件が満たされるまで永遠に待機します。

Awaitility.await().forever().until(conditionIsSatisfied()); 

また、あなたは待つように分および/または最大時間を指定することができます。メッセージのいくつかの予想される数がすでに処理されている場合conditionIsSatisfiedがチェックすることができ呼び出し可能です

Awaitility.await().atLeast(1, HOURS).and().atMost(2, HOURS).until(conditionIsSatisfied()); 

private Callable<Boolean> conditionIsSatisfied() { 
     return new Callable<Boolean>() { 
      public Boolean call() throws Exception { 
        return allMessagesProcessed; 
      } 
     }; 
} 

詳細については、usageページを参照してください。

+0

私の場合は、テストされたアプリケーションを変更せずにテストしているアプリケーションから処理されたメッセージの数を取得する方法がわかりません。私がそれを変更できない理由は、それが生産コードであり、テストのためにそれを行うことは許されていないからです。 –

+0

@ bogdan.rusu残念ながら、提供されるコードサンプルがなくても、より具体的で意味のある何かを提案するのは難しいです。 –

関連する問題