最近、Java開発においてJUnitでawaitを使用するとテストが効率化できることが分かったので紹介しておきます。
なお、org.awaitilityのawaitです。
awaitを使うのは処理が完了するまでや、キャッシュが削除されるまでなど、ある程度の時間を待ちたいケース。
Javaで待つ処理としてはThread.sleep()あたりの知名度が高いかもしれませんが、この場合は指定した一定時間を待つことになります。
一方、awaitを使って下記のように実装すると
await().atMost(30, TimeUnit.SECONDS).untilAsserted(() -> {
// 欲しい結果が得られるまでリトライしたい処理
// 欲しい結果のassert文
});
最大で30秒間、欲しい結果が得られるまでリトライを繰り返してくれます。
固定時間秒のsleepだと前の処理の実行時間が6秒だったり8秒するから余裕をもって10秒とかって設定しないといけないですが、それでもたまにPCが重くなって前処理で10秒以上かかってしまってエラーになる・・・
なんてこともあるので、余裕を持った上限時間を設定し、かつ早く処理が進んだ時はその時間でテストを完了できるのは非常にありがたいです。
リグレッション観点でCIを使っているプロジェクトではぜひawaitを使いましょう!