Spring BootでControllerの単体テストを行う方法をメモしておきます。方法はいくつかありますが、今回は最もシンプルなstandaloneSetupを使った単体テストを行います。
環境
Controllerの単体テストを行う方法
ここからは実際のクラスを用いてControllerの単体テストを行う方法をご紹介します。
必要な依存パッケージ
spring-boot-starter-testがあればOKです。Spring Bootプロジェクトを作成する場合、最初から依存パッケージとして入っているはずなので改めて追加する必要はないかと思います。
テスト対象のクラス
GETでアクセスすると「Hello World」をレスポンスとして返すだけのシンプルなControllerクラスです。
テストクラス
テストクラスの内容を補足しておきます。
まずは以下の箇所で、Spring MVCのモック(MockMvc)を設定しています。standaloneSetupの引数にテスト対象のControllerクラスのインスタンスを指定するのがポイントです。この設定により、テスト対象のControllerクラスにアクセスしたときの動作を検証することができます。
以下の箇所では、MockMvcを使ってテスト対象のControllerクラスにGETでアクセスし、その動作を検証しています。今回はご紹介していませんが、HTTPヘッダやリクエストボディを指定してアクセスすることも可能です。
Serviceに依存しているControllerの単体テストを行う方法
Controllerクラス内でServiceクラスを呼び出している場合のControllerの単体テスト方法もご紹介しておきます。実際には、こちらの方を使う場合が多いかと思います。
テストクラス
Mockitoを使って依存クラス(DemoService)をモック化してやればOKです。あとはモックをインジェクションしたテスト対象のControllerクラスをstandaloneSetupの引数に指定してやるだけです。
Mockitoの使い方については、以下記事をご覧ください。
Spring BootでMockitoの導入方法〜使い方をまとめました - Reasonable Code
まとめ
Spring BootでControllerの単体テストを行う方法でした。単体テストレベルでは、standaloneSetupを使った方法が最もシンプルなのでおすすめです。