Androidでmockito+hamcrestを使うとエラーになる件
Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description
っていうようにテストを起動したりしようとするとこういうエラーが出ちゃう。その原因っていうが単純でmockitoの中にhamcrestのインターフェース群っぽいのが含まれている模様なので、これのクラスとhamcrestのjarに含まれているクラスが衝突してclasses.dexを生成するにあたってエラーになるんじゃないかと
まぁmockito内のhamcrestの参照を消せば動くっちゃ動く。でAndroidなJUnitは3.8.x?系がベースだと思われるんだけど、JUnit3ってassertThat無いよねと。org.hamcrest.MatcherAssertにassertThatが含まれているので、Androidで使うときはそれをstatic importなりをすれば良いかと
とにかく、Androidでmockitoを使ってる場合にhamcrestを使おうとするとそういう問題が出るっていうのが把握
解決策
- mockito-allを削除
- mockito-coreを http://mvnrepository.com/artifact/org.mockito/mockito-core/1.9.5 よりダウンロード
- objenesisをダウンロード http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.objenesis&version=1.2.0
- テストプロジェクトのlibsディレクトリにダウンロードしたjarを入れる