Posted at

AndroidのJUnitテストでMockitoがエラーになってハマったがdexmaker-mockito入れてるせいだった

More than 1 year has passed since last update.

AndroidでandroidTestではなくtestの方でJUnitテストを書いていたらMockitoで以下のようなエラーが出てしまいハマった。

junit java.lang.IllegalArgumentException: dexcache == null (and no default could be found; consider setting the 'dexmaker.dexcache' system property)

ググると

http://qiita.com/mmorita/items/ac77b2affda0cb0c7edf

のように

System.setProperty(

"dexmaker.dexcache",
getInstrumentation().getTargetContext().getCacheDir().getPath());

をすればいいよという情報がたくさん出てきたが、自分はJUnitで実行したいのでContextを取ることが出来ないのでどうしたものかと悩んだ。

いろいろ探した結果、以下のstackoverflowによって解決した。

http://stackoverflow.com/questions/35970899/robolectric-mockito


You can use Mockito with Robolectric; however, you need to make sure you're adding the "normal" Mockito dependency, and not the Mockito-Android or dexmaker dependency.


つまり、JUnitなのにandroidTestCompileと同じようにtestCompileにも

com.crittercism.dexmaker:dexmaker-mockito:xxx"

を書いてしまっているという根本的なことが原因でした。

これを外したところ無事動くようになりました。

もしかしたら他の要因もあるかもしれませんが、この情報がググっても全然見つからなかったのでハマった人用にメモしておきます。