JUnit

MockitoでfinalメソッドをMock化してみた

Mockitoのバージョンが2の場合、MockMakerファイルを配置すれば、finalメソッドをMock化することができる。今回は、MockMakerファイルを配置した上で、finalメソッドをMock化するサンプルプログラムを作成してみたので、共有する。

前提条件

下記記事の実装が完了していること。

IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...

また、以下のように、Mockitoのバージョンが2であること。
Mockitoのバージョン

作成したサンプルプログラムの内容と実行結果

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから変更したプログラムである。

src/mainフォルダ下の変更したプログラムの内容は以下の通りで、コントローラクラスで、finalメソッドとfinalでないメソッドの両方を呼び出している。

上記ソース内容で、 Spring Bootアプリケーションを起動し、「http:// (ホスト名):(ポート番号)」とアクセスすると、以下の画面が表示される。
テスト対象クラスの実行結果

また、MockMakerのファイルは以下のように、「src/test/resources/mockito-extensions」フォルダ下に、「org.mockito.plugins.MockMaker」というファイル名で作成し、そのファイルに「mock-maker-inline」と記載する必要がある。
MockMaker

さらに、コントローラクラスのテストを行うプログラムの内容は以下の通りで、finalメソッドであるgetNowDateTimeFinalメソッドも、finalメソッドでないgetNowDateTimeメソッドも、Mock化できている。

また、Modelオブジェクトを生成し返却するプログラムの内容は以下の通りで、先ほどのDemoControllerTestクラスで呼び出している。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/junit-mockito-final/demo

DemoControllerTestクラスを実行した結果は以下の通りで、finalメソッドであるgetNowDateTimeFinalメソッドも、finalメソッドでないgetNowDateTimeメソッドも、Mock化により返却された値が設定されることが確認できる。
JUnitの実行結果

要点まとめ

  • Mockitoのバージョンが2の場合、MockMakerファイルを配置すれば、finalメソッドをMock化することができる。
  • MockMakerのファイルは「src/test/resources/mockito-extensions」フォルダ下に「org.mockito.plugins.MockMaker」というファイル名で作成し、そのファイルに「mock-maker-inline」と記載すればよい。