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セットアップで行い、テストメソッド中でオーバライドする。ただ、スタブ化のオーバライドは「スタブしすぎ」の匂いも漂う。
- 一度スタブ化されると、何度呼び出されようが、同じ値を返す。
- 同じメソッドを同じ引数でスタブ化した場合、最後のスタブ化だけが生き残る。