やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

MockitoをAndroidテストプロジェクトで使用する #android_tec

先の記事(さようならAndroid Mock)で書いた通り、Javaにおけるモックフレームワークとして人気の mockito 1.9.5 rc1以降で、Dalvik上での動作が正式にサポートされました。

mockitoの導入方法

Android Mockと比べて、とても簡単です。

  1. Downloads - mockitoから、1.9.5 rc1以降のjarファイル(執筆時点の最新はmockito-all-1.9.5.jar)をダウンロードし、プロジェクトに追加します。
  2. テストプロジェクトのproperties -> "Java Build Path" -> "Libraries"タブを開き、"Add JARs..."ボタンをクリックしてダウンロードしたjarファイルを選択します。
  3. Downloads - dexmakerから、dexmakerとdexmaker-mockitoの2ファイルをダウンロードし、プロジェクトの/libsディレクトリに追加します。(こちらはクラスパスを通す必要はありません)

セットアップは、これだけです。

尚、mockitoはMIT License、dexmakerはASL2.0です。

mockitoの使い方

@ITさんの記事「Android Mockを利用してHTTP通信をテストするには」で書いた*1サンプルコードをmockito向けに書き換えたものをgistに上げておきました。
対応するプロダクトコードは
https://atec.googlecode.com/svn/atmarkit/usemock/trunk/UseMockExample
Android Mockを使用したテストコードは
https://atec.googlecode.com/svn/atmarkit/usemock/trunk/UseMockExampleTest
に置いてあります。

mockitoとAndroid Mock(EasyMock)の違い

基本的な文法の置き換えは Mockito VS EasyMock が参考になります。

文法以外の違い

  • mockitoではreply()は不要です。モードの概念はありません。
  • mockitoでは全てのモックは"NiceMock"です。(Spyもありますが、StrictMockはありません)
  • StrictMock的な呼び出し順序のverifyは、InOrderを使用することで可能です
  • メソッドの呼び出し順によって戻り値を変えたいときは、thenReturn()の引数に列挙するか、thenReturn()をチェインさせることで定義できます。ただしサンプルのtestParseFeed()のように複数メソッドの順序を定義すると可読性が落ちるため、ここまでmockに依存したテストを書くのはおすすめしません。

以上、簡単ですが、@IT記事のフォローアップになっていれば幸いです。

*1:記事は半年の命でした…ごめんなさいごめんなさい