Revision 1 as of 2009-12-09 13:47:58

Clear message
Locked History Actions

mockito/Manual

mockitoマニュアル

以下はMockitoクラスJavaDocの訳(現在翻訳進行中)

以下の例はListをモックしているが、これは誰もがそのインターフェース(add, get, clear等のメソッド)を知っているからだ。 たぶん、実際にはListをモックすることなんかないだろうけど。

ふるまいを検証してみよう

 //Mockitoをstatic importすると、コードがきれいに書けるよ
 import static org.mockito.Mockito.*;
 
 //モックを作る
 List mockedList = mock(List.class);

 //モックオブジェクトを使ってみる
 mockedList.add("one");
 mockedList.clear();

 //検証する
 verify(mockedList).add("one");
 verify(mockedList).clear();

作成されるてから、モックはすべての作用を記録している。後で興味のある作用についてだけ検証することができる。

スタブを作ってみよう

 //コンクリートクラスのモックを作成することができる、インターフェースだけじゃなく
 LinkedList mockedList = mock(LinkedList.class);
 
 //スタブ化
 when(mockedList.get(0)).thenReturn("first");
 when(mockedList.get(1)).thenThrow(new RuntimeException());
 
 //以下は"first"を表示する
 System.out.println(mockedList.get(0));
 
 //以下は実行時例外を投げる
 System.out.println(mockedList.get(1));
 
 //以下は"null"を表示する、get(999)はスタブされていないから。
 System.out.println(mockedList.get(999));

 //スタブを検証することもできるけれども、冗長だろう。
 //If your code cares what get(0) returns then something else breaks (often before even verify() gets executed).
 //If your code doesn't care what get(0) returns then it should not be stubbed. Not convinced? See here.
 verify(mockedList).get(0);

  • デフォルトでは、すべての返り値のあるメソッドについては、モックはnull, 空のコレクション、適当なプリミティブやプリミティブラッパ値(例えば、0, false, ...)などを返す。
  • スタブ化はオーバライドできる。例えば、共通のスタブ化をfixtureセットアップで行い、テストメソッド中でオーバライドする。ただ、スタブ化のオーバライドは「スタブしすぎ」の匂いも漂う。
  • 一度スタブ化されると、何度呼び出されようが、同じ値を返す。
  • 同じメソッドを同じ引数でスタブ化した場合、最後のスタブ化だけが生き残る。