7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Spring-Boot】Junitを利用した単体テストでよく利用するアノテーション

Last updated at Posted at 2020-03-18

概要

Spring-BootのJunitテストを作成する際に利用するアノテーションは多種多様であり、覚えきれないし、大量に付与されていると1つ1つ読み解くのが難しい。
そのため、よく利用するものをここでまとめていく。

本文

@ContextConfiguration

指定した@Configrationを付けたクラスをテスト実行時に読み込んでくれる。
任意のBean登録をしたいときに使う。

例)TestConfig.java を読み込ませる場合

@ContextConfiguration(classes = {TestConfig.class})

@ActiveProfiles

@profile("prduciton")などの記載で、application.ymlで指定したアクティブなプロファイルによってBeanを切り替えることはよくある。ただし、単体テストでapplication.ymlを編集することはできない。
このようなときに利用する。

例) profileをdefault(指定なし)の状態でテストを実行する場合

@ActiveProfiles("") 

@TestPropertySource

application.ymlなど外部指定する設定値を置き換える際に利用。

例) app.setting.key1とapp.setting.key2の値を指定してテストしたい場合

@TestPropertySource(
    properties = {
      "app.setting.key1 = xxxx",
      "app.setting.key2 = yyyy"
    })

@EnableConfigurationProperties

ymlやpropertiesファイルの値を@ConfigurationPropertiesを付与したクラスのフィールドにマッピングさせた場合、このクラスをJunit時に有効にさせるアノテーション。
これを見つけるまで、@ConfigurationPropertiesを付与したクラスのフィールドがNullとなり、苦労した。

例) @ConfigurationPropertiesを付与したAppSetting.javaで外部ファイルの値をマッピングできるようにする場合

@EnableConfigurationProperties(value = AppSetting.class)
@Configuration
@ConfigurationProperties(prefix = "app.setting")
public class AppSetting {

  /** app.setting.key1の値. */
  private String key1;

  /** app.setting.key2の値. */
  private String key2;

}

@AutoConfigureMockRestServiceServer

RestTemplateによる通信先のモック化。
これは使い方が結構難して、単体テストで常に使うかどうかは微妙。
@AutoConfigureMockRestServiceServerを付与したうえで、以下のようにすると、RestTemplateによる通信結果を操作できる。

    RestTemplate restTemplate = (モック化したRestTemplateオブジェクト);
    MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restTemplate).build();
    mockServer
            .expect(requestTo(expectURL)) // モック化したいURL
            .andExpect(MockRestRequestMatchers.method(HttpMethod.POST)) // リクエストメソッド
            .andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK));//モックによるレスポンス

まとめ

その他お作法のアノテーションも含めて全部つけると以下の状態になる。
これは最低限レベルで、いろいろやろうとするともっと多くなる。

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {TestConfig.class})
@EnableConfigurationProperties(value = AppSetting.class)
@ActiveProfiles("") 
@TestPropertySource(
    properties = {
      "app.setting.key1 = xxxx",
      "app.setting.key2 = yyyy"
    })
@AutoConfigureMockRestServiceServer
class JunitTest {


}

参考にさせていただいたサイト

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?