2014年3月8日土曜日

Mockitoを利用したテストコードが失敗する

Androidのテストで利用できるモックライブラリのMockitoをテストコードに利用すると
エラーが出てテストが失敗してしまう。

エラーは次のバーチャルデバイスで発生しました。
  • GenymotionのNexus 4 - 4.3 API 18 - 768x1280
なぜか、次のバーチャルデバイスではエラーが発生しませんでした。
  • GenymotionのNexus S - 2.3.7 API 10 - 480x800
AndroidのAPIのバージョンが原因なのか、エラーメッセージをGoogleで検索すると似たような
報告はありました。

エラーメッセージは次のとおり
java.lang.IllegalArgumentException: dexcache == null (and no default could be found; consider setting the 'dexmaker.dexcache' system property)
"dexmaker.dexcache"という文字列があるので、dexmaker絡みかな。
今のところは様子見で違うAPIのバージョンを使おうかなと思います。

エラーが発生したテストコード
import android.test.AndroidTestCase;

import java.util.ArrayList;

import static org.mockito.Mockito.*;

public class MockExampleTest extends AndroidTestCase {

    public void testMock() throws Exception {
        ArrayList mock = mock(ArrayList.class);
        when(mock.isEmpty()).thenReturn(false);
        assertFalse(mock.isEmpty());
    }
}

バーチャルデバイスだけなので、やはり実機が欲しいですねぇ。