つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

MockitoはモックをInjectしてこそかなーと

   

Mockito(モヒート、モック伊藤)はJavaのモックライブラリです。モックオブジェクトを作成してユニットテストに利用することができます。

今回Mockitoを使ったり調べたりするうちに、いくつかのMockitoのサンプルコードに対して、「Injectionは?Injectionはどうするの?え?setter?」と思ったので、自分でサンプルコードを書いてみることにしました。

よくあるサンプルコード

例1

例2

良くこんな感じのサンプルを見かけます。もちろん言いたいことは分かりますし、Mockitoにちょっと触れてみるには良いと思います。

ですが、いくつか問題があるな、と思いました。

サンプルの問題

  • 例1は、単にMockitoの機能のテストをしているにすぎない
  • 例2は、MockオブジェクトをInjectする方法がsetterなので、setterがないときどうするのか不明

自分が考えるMockitoのサンプルコード

テストコード

Hogeクラス

Mockito、モックによるテストのポイント

  • Injectionはアノテーションで行う
    これで注入先がfieldならsetterが無くてもOKです。ローカル変数に注入したいケースもあるかもしれませんが、自分が調べた限り無理そうな感じです。
  • 検証はverifyが基本、モックオブジェクトにどういうことが起きたかを検証する
    これでモックオブジェクトに対してテスト対象のクラスがどういうことをしたかが検証できます。assertThatではできないことができます。

自分の認識ではモックでもスタブと同じことができます。thenReturnとかで。ただそれは本質ではない・・と。モックの本質はモックオブジェクトに対してどのようなことが起きたかを検証することなのではないかなーと。

以上です。

 - ツール ,