Awaitibilityを使ってeventuallyなテストをJavaで書く

More than 1 year has passed since last update.

JavaのテストをJUnitなどで書いている時に、ある非同期処理を待ってからassertしたいことなどが多々あります。そんなときは CountDownLatch を使ってある非同期処理の終了までawiatするというコードを書くことになるでしょう。

AwaitibilityCountDownLatchをwrapし、そういった処理をテスト中に簡単にかけるようにするライブラリです。


void test() {
  obj.doAsync();
  await().atMost(10, SECONDS).until( () -> obj.doneAsync() );
  assertTrue(obj.isDone());
}

Java8の文法を用いていますがこのように書けます。
untilにはCallable<Boolean>を渡せばいいので、もちろんJava7などでも使用が可能です。

untilに渡すconditionのpoll間隔はデフォルトだと100msですが、それをコントロールすることもできます。


void test() {
  obj.doAsync();
  await()
    .atMost(10, SECONDS)
    .pollDelay(500, MILLISECONDS)
    .pollInterval(200, MILLISECONDS)
    .until( () -> obj.doneAsync() );
  assertTrue(obj.isDone());
}

使用方法

以下に詳細な情報が載っています。

https://github.com/awaitility/awaitility/wiki/Usage