Mockitoとは? | SEが投資とダイエットにチャレンジ

SEが投資とダイエットにチャレンジ

投資信託やダイエット、ITの小技、資格試験、読書などを備忘録も兼ねて発信していきます!

仕事で調査することになったので、その際の参考資料として自宅で調査した情報を残したいと思います。

 

今回はテストコードを作成する際に使用するモックライブラリとして知られているMockitoについて説明していきます。
 

いきなりMockitoの説明に入る前に、Mock(モック)とは何か?から説明していきます。

 

Mockとは?

テストに必要な部品の値を疑似的に設定するもの、
他のクラスが返す戻り値を自由に設定することです。

 

まだテスト対象の一部が完成していない時やAWS、Azure、Googleなどの外部サービスを使いたいけど、

まだアカウントが発行されていない時などに、使用するイメージです。

 

関連用語とその役割

  • モック ・・・ メソッド実行に対して、実行回数やパラメータの呼び出しを記録するオブジェクト
  • テストダブル ・・・ テストを目的として本物のオブジェクトの動作をまねているスタブやモックなどのオブジェクトの総称
  • スタブ ・・・ メソッド実行に対して、事前に定義された振る舞い(引数、返り値)を提供するオブジェクト
  • スパイ ・・・ メソッドの実行に対して、実行回数やパラメータの呼び出しを記録するオブジェクト。モックはメソッドの実行中に検証、スパイはメソッドの実行後に検証するという違いがある
  • ダミー
  • フェイク
  • インジェクト

 

色々と調べたところで、そろそろ本題に入りたいと思います。

 

Mockitoとは?

 

Mockitoの特徴

  • アノテーションを付与するだけではなく、初期化処理を実装する必要がある。
  • 書記かにはMockitoAnnotationsのinitMocksメソッドを使用する
  • Beforeを付与したメソッド内で初期化すると良い
  • thenメソッド系とdoメソッド系が有るが、基本的にdoメソッド系を使用していれば良い
  • verifyメソッドでメソッド実行に対する呼出回数や引数の検証出来る

 

代表的なアノテーション

@Mock ・・・ 元オブジェクト全体をモック化する。
@Spy ・・・ 元オブジェクトのすべての内部ロジックを持つが、doメソッド系で内部ロジックの振る舞いを上書きすることが出来る。
@InjectMocks ・・・ モックオブジェクトのインジェクト先オブジェクトを指定できます。

 

スタブメソッドの振る舞い        

  • thenメソッド系
    • thenReturn
    • thenThrow
  • doメソッド系
    • doReturn
    • doThrow

doメソッドに出来てthenメソッドに出来ないことは引数の型チェックくらいなので、doメソッドを使用する    
thenメソッドで出来ないこと

  • voidメソッドをスタブ化する
  • @Spy、spyメソッドで生成したモックオブジェクト