Android+mockitoの利用時の設定
Androidでユニットテストを作成するにあたり、モックのライブラリがないかと探して、mockitoというライブラリが良さそうなので今回導入を行ってみました。Androidで利用する場合に、別のライブラリや設定が必要であったため、その時にハマった点について共有します。 以下の記事を元にしています。
Mockito + Dexmaker on Android - Stack Overflow
mockitoとは?
mockitoとは、Java用のテスト作成時にモックやスタブを作成するためのライブラリです。mockや、spyといったメソッドを利用することで、モックやスタブの生成が可能です。 残念ながら、テスト作成時のprivate メソッドの呼び出しには対応していないため、private メソッドを利用した場合はpowerMockというライブラリを新たに導入すると良いそうです。 powerMockの導入については別の機会に対応したいと思います。
mockitoの導入と設定
Androidでmockitoを利用する場合、mockitoとdexmakerというライブラリを導入する必要があります。 導入手順は以下の通りです。
- Downloads - mockito - simpler & better mocking - Google Project Hosting より、最新(現在、1.9.5)のmockitoのjarファイルをダウンロードし、Androidのlibsディレクトリにコピー
- Downloads - dexmaker - Programmatic code generation for Android. - Google Project Hostingより、dexmaker-mockito-1.0.jar、dexmaker-1.0.jarをダウンロードし、Androidのlibsディレクトリにコピー
ここで、mockitoを利用すると 以下のようなエラーで発生する場合があります。
java.lang.IllegalArgumentException: dexcache == null (and no default could be found; consider setting the 'dexmaker.dexcache' system property) at com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:359) at com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:252) at com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:54) at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
このエラーを解消するために、以下のような対応を行います。
3. 以下のCustomInstrumentationTestRunnerファイルを作成
public class CustomInstrumentationTestRunner extends InstrumentationTestRunner { @Override public void onCreate (final Bundle arguments) { super.onCreate(arguments); System.setProperty("dexmaker.dexcache", getTargetContext().getCacheDir().toString()); } }
CustomInstrumentationTestRunnerは、InstrumentationTestRunnerを継承したクラスです。
システムに、dexmakerキャッシュのディレクトリパスの設定を行います。
4. テストプロジェクトのManifestファイルのInstrumentationにCustomInstrumentationTestRunnerを設定
<instrumentation android:name="my.package.CustomInstrumentationTestRunner" android:targetPackage="my.target.package" />
テストプロジェクトのデフォルトのInstrumentationの設定をCustomInstrumentationTestRunnerへ変更します。
5. eclipseのconfigureの設定
eclipseのrunning configurationから、Instrumentationとして作成したCustomInstrumentationTestRunnerを利用するよう設定を行います。
以上で設定は完了です。 mockitoを利用したテストの書き方については、以下のサイトが参考になると思います。