Mockitoによる非同期処理のテスト

  • 23
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Javaのユニットテストで非同期処理をテストしたい場合、
MockitoVerificationWithTimeoutを使うと簡潔にテストを記述できます。

例として、非同期処理Foo#requestとそのテストコードを示します。
このテストはFoo#requestの中でCallback#onSuccessが10秒以内に呼ばれることを確認します。

timeoutメソッドが肝です。timeoutの引数にはタイムアウト値をミリ秒単位で指定します。

Foo.java
public class Foo {
    public static void request(Callback callback) {
        new Thread() {
            ...
            callback.onSuccess();
        }.start();
    }
}
FooTest.java
import static org.mockito.Mockito.*;

public class FooTest {
    @Test
    public void test() {
        Callback callbackMock = mock(Callback.class);
        Foo.request(callbackMock);

        verify(callbackMock, timeout(10000)).onSuccess();
    }
}

更に、timesを指定することもできます。

FooTest.java
import static org.mockito.Mockito.*;

public class FooTest {
    @Test
    public void test() {
        Callback callbackMock = mock(Callback.class);
        Foo.request(callbackMock);

        verify(callbackMock, timeout(10000).times(2)).onSuccess();
    }
}