Mockito(リンク)は、Java向けのmockフレームワークである。EasyMockやjMockと酷似しているが、実行後に呼び出された内容を検証することで、expectationの必要性を除去する。他のmockライブラリは、実行前にexpectationを記録することを必要とする。その結果、設定コードが見苦しくなる傾向にある。
Mockitoユーザで、ソフトウェアデベロッパのHamlet D'Arcy氏(リンク)がブログで説明しているように、expectationが欠落しているのは、思わぬ幸運である。
「Mockito は、expectaionを必要とせずにユニットテストをクリーンアップします。そんな訳で、個人的にはEasyMock APIよりMockito APIのほうがかなり好きです。
ThoughtWorksのKetan Padegaonkar氏(リンク)は、 Mockitoの類のない構文を褒めちぎっている。
「これはJMock構文よりもかなり見栄えが良く、読み出しも申し分ないです。一目惚れでした。テストに夢中です」。
Mockito 1.5のリリースでは、非mockオブジェクトが特定のメソッドで呼び出されたことを検証することで、非mockオブジェクトを「偵察する」機能がある。たとえば、
List list = new LinkedList();
List spy = spy(list);
「偵察」変数は、そのリストオブジェクトのハンドルとして機能する。mockオブジェクトのように取り扱われる。たとえば、サイズメソッドはスタブされる。
stub(spy.size()).toReturn(100);
通常のメソッドも呼び出し、検証することができる。
spy.add("one");
verify(spy).add("one");
その他の改善点は、代替でさらに読み取り可能なスタブ構文である。たとえば、
stub(obj.someMethod()).toReturn(result);
以下のように記述することができる。
doReturn(result).when(obj).someMethod();
旧スタイルと同様の長さであるが、より明確に読み取り、括弧が少ない。doReturn()
の他に、doThrow()、
doAnswer()および
doNothing()
expectationがある。
Mockitoに含まれるその他の機能は、以下のとおりである。
- 具体的なクラスおよびインターフェイスをmockする機能
- カスタム引数matcher
- 命令された検証
- クリーンスタックトレース
Mockitoを始めるのは、クラスパスにJARファイルを追加することと同じくらいに簡単である。インストールの手順、文書および詳細なコードのサンプルについては、Google Codeプロジェクト(リンク)のサイトを訪問のこと。