JUnit

JUnitのPowerMockを利用してstaticメソッドのMock化を一部に限定してみた

今回は、JUnitのPowerMockのうち、Mockitoの@Spyに相当するものを利用して、staticメソッドのMock化をしてみたので、サンプルプログラムを共有する。

前提条件

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

JUnitのMockitoの@Spyを利用してMock化するメソッドを限定してみたこれまではMockオブジェクトを利用し、テスト対象クラスから呼ばれるクラスのメソッドをMock化してきたが、@Spyアノテーションを利用...

やってみたこと

  1. テスト対象プログラムの作成と実行
  2. JUnitのプログラムの作成と実行

 

テスト対象プログラムの作成と実行

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

テスト対象のコントローラクラスの内容は以下の通り。

また、上記プログラムから呼び出されるユーティリティクラスの内容は以下の通りで、全てstaticメソッドになっている。

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



JUnitのプログラムの作成と実行

build.gradleの内容は以下の通り。PowerMockが利用できるための設定を追加している。

また、テスト対象のコントローラクラス「DemoController.java」から呼ばれるユーティリティクラス「DemoUtil.java」を、PowerMockito.spyを利用して一部をMock化してみたJUnitのサンプルプログラムの内容は以下の通り。

上記プログラムによって、DemoUtil.getRealString1()を呼び出した際はMock化した値「mockString1」が取得でき、DemoUtil.getRealString2()を呼び出した際は実際の値「realString2」が取得できる。また、void型のDemoUtil.testVoid()を呼び出した際は何もしない設定となる。

上記プログラムを実行した結果は以下の通り。
JUnitテスト実行結果1



さらに、同等の処理をPowerMockito.mockStaticを利用してMock化してみたサンプルプログラムの内容は以下の通り。

上記プログラムによって、DemoUtil.getRealString1()を呼び出した際はMock化した値「mockString1」が取得でき、DemoUtil.getRealString2()を呼び出した際はnullが取得される。また、void型のDemoUtil.testVoid()を呼び出した際の設定は特に記載していないが、何もしない設定となる。

上記プログラムを実行した結果は以下の通り。
JUnitテスト実行結果2

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

要点まとめ

  • PowerMockito.spyを利用すると、staticメソッドを含むクラスの一部をMock化できる。