##モックとは
モックライブラリでは、例えば、テスト対象のクラスAが別のクラスBに依存している場合に、[...]クラスBをクラスB自身の実装に依存しないmock(ハリボテ)として生成し、更にそのメソッドの戻り値を任意に設定するという事ができます。これにより「クラスBがこういう状態でこういう値を戻す場合のクラスAのテスト」が容易に書けます。
引用:Mockito初めの一歩
##モックライブラリ Mockito (モキート)
Mockitoは、モックを簡単に使えるように手助けしてくれるライブラリの一つ。
導入方法は簡単で、Mavenプロジェクトの場合はここから好きなバージョンを選んでpom.xmlにコピペするだけ。
簡単な使い方としては、Mockito#mockメソッドもしくは@Mockアノテーションを使うと、そのクラスの実装に依存しないモックオブジェクトを生成することができる。
モックオブジェクトはメソッドごとに戻り値を指定することができ(これを「スタブ」という)、自分の思い通りのふるまいをさせることができる。
##モックオブジェクトをつくる
###Mock (訳:真似る)
全てのメソッドをモックする。対象のクラスのインスタンスに一切影響されない。
@Mockアノテーションか、mock()メソッドを用いる。
###Spy (訳:監視する)
一部のメソッドのみをモックする。
Mockと違い、対象のクラスのインスタンス通りのふるまいをする(スタブしない限り)。
@Spyアノテーションか、spy()メソッドを用いる。
MockとSpyの違いをまとめると、全てモックする(Mock)か、一部のみモックする(Spy)か。
##モックオブジェクトを操作する
###Stub (訳:端くれ)
モックオブジェクトの特定のメソッドが呼ばれたときに何を戻すかを指定すること。
スタブとはテスト対象の間接入力をテストシナリオに合わせて都合よく書き換えるためのもの。モックとはテスト対象の間接出力が正しいことを確認するためのもの。
任意の値に戻り値を指定することを「スタブ化」というらしい。
通常、
when(Mockオブジェクト.メソッド名()).thenReturn(戻したい値);
を用いてモックのふるまいを指定する。
ただ、Spyの場合は
doReturn(戻したい値).when(Spyオブジェクト).メソッド名()
を用いる。
Dummy: This is an object that is used only for code to compile and has no business logic associated with it, like a parameter passed to a function.
Fake: This is an object that has an implementation but not ready for production, like H2 in-memory database.
Stub: This is an object that has predefined answers to method executions made during the test.
Mock: This is an object that has predefined answers to method executions made during the test and has recorded expectations of these executions.
Spy: This is an object similar to stubs, but they additionally record how they were executed.
http://www.discoversdk.com/blog/getting-started-with-mockito
##Mockitoその他機能
###Verify (訳:検証)
verify(クラス名, times(回数)).メソッド名(引数)
指定したメソッドが、指定した引数を持って指定した回数だけ実行されたかどうか検証することができる。
テスト対象の中で、他クラスのメソッドを呼んでる部分をテストする際などに使うと良い。
(他クラスのメソッドの振る舞いは、他クラスのテストクラスでテストすればいいので、ここでは呼び出されているかどうかの検証だけで十分。)
また、times(回数)の部分をnever()とすることで、一回も実行されていないことを検証することも可能。
##参考リンク