ぺーぺーSEのブログ

備忘録・メモ用サイト。

Spring BootでJUnitテスト

Spring Bootのテストについて書く。
spring-boot-starter-testを使用するとコントローラのJUnitテストも可能になる。
テストやコードインスペクションレポートのMaven設定は以下を参照。

blog.pepese.com

テスト対象アプリ

以下の記事で紹介した入門アプリをテスト対象とする。

blog.pepese.com

テストの作成

以下を作成する。

  • com.pepese.sample.service.HelloServiceTest
    • コントローラへDIされるサービスクラスのテスト
  • com.pepese.sample.controller.HelloControllerTest
    • コントローラのテスト

サービスのテスト(com.pepese.sample.service.HelloServiceTest)

ポイントは以下。

  • @RunWith(SpringRunner.class) アノテーション
    • Spring BootでJUnitテストするときはコレをつける
  • @SpringBootTest アノテーション
    • SpringのJava/XML Based Configurationなどの設定を読み込んでくれる

Springの設定(Java/XML Based Configuration)を読み込んでいるのでDIでテスト対象のインスタンスを取得できる。

コントローラのテスト(com.pepese.sample.controller.HelloControllerTest)

ポイントは以下。

  • @AutoConfigureMockMvc アノテーションをつけるとコントローラ層のモック( MockMvc )を作成でき、これでコントローラのJUnitテストが可能になる
    • @WebMvcTest(HelloController.class) としてコントローラクラスを指定することもできる
  • @MockBean でコントローラ内でDIされるモジュールのモック(Mockito)を作成できる
  • when メソッド等(Mockito)を使用してコントローラ内にDIされたモジュールの挙動を指定できる
  • HamcrestのMatchersを使用してassertする

テストの実行

基本的には mvn test で実行可能だが、特定のクラスを指定してテストしたい場合は mvn clean test -Dtest=*.HelloControllerTest のように指定して実行できる(正規表現の指定可能)。
また、 mvn clean test -Dtest=*.HelloControllerTest,*HelloServiceTest のようにカンマ区切りで複数指定することもできる。