先の記事(さようならAndroid Mock)で書いた通り、Javaにおけるモックフレームワークとして人気の mockito 1.9.5 rc1以降で、Dalvik上での動作が正式にサポートされました。
mockitoの導入方法
Android Mockと比べて、とても簡単です。
- Downloads - mockitoから、1.9.5 rc1以降のjarファイル(執筆時点の最新はmockito-all-1.9.5.jar)をダウンロードし、プロジェクトに追加します。
- テストプロジェクトのproperties -> "Java Build Path" -> "Libraries"タブを開き、"Add JARs..."ボタンをクリックしてダウンロードしたjarファイルを選択します。
- 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:記事は半年の命でした…ごめんなさいごめんなさい