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

  • 2
    Like
  • 0
    Comment

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"

を書いてしまっているという根本的なことが原因でした。
これを外したところ無事動くようになりました。
もしかしたら他の要因もあるかもしれませんが、この情報がググっても全然見つからなかったのでハマった人用にメモしておきます。