Spring Bootのテストコードで使うアノテーション解説




Spring Bootでテストコードを書く

Spring Bootでテストコードを書く際にどんな動作をするか分からないアノテーションだらけってことは初心者にはよくあると思います。自分がまさしくそうです。今も完璧には理解してないです。。。

アノテーションはSpringのいいところでもあるのですが黒魔術すぎてそれぞれが何をしているのか分からないけど、とりあえずクラスの先頭に付けとけ的な記事が多いのでそれぞれのアノテーションいついて説明します。

事前準備

Spring Bootのテストにはspring-boot-starter-testを使用するので下記を追加しておいて下さい。

  • gradleの場合はbuild.gradle
testCompile('org.springframework.boot:spring-boot-starter-test')
  • mavenの場合はpom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

 

使用するアノテーション

今回説明するのは下記3つです。

  1. @TestExecutionListeners

  2. @RunWith

  3. @SpringBootTest

@TestExecutionListeners

TestExecutionListenersは、指定したListenerをTestContextManagerに設定することができ、さまざまなタイプの機能を使用することができるようになります。

下記はテストで使える3つの機能を設定したものをKotlinで書いてます。

@TestExecutionListeners(
        DependencyInjectionTestExecutionListener::class,
        DirtiesContextTestExecutionListener::class,
        TransactionDbUnitTestExecutionListener::class
)

 

@RunWith

テストを何で実行するか指定することができます。Spring4.3以降からSpringJUnit4ClassRunnerと同じ機能をSpringRunnertという別名のクラスで使用できるようになったので基本的にこっちを指定しておけば大丈夫です。

@RunWith(SpringRunner::class)

 

@SpringBootTest

テストでSpringBootの機能を使えるようにしているものでapplication.propertiesなどの設定ファイルを読み込んだりしてくれています。

 

まとめ

以上の3つをまとめるとこんな感じになります。Spring Bootでのテストは最低限この3つがないとテストができないのでテストコードを書くときはこのアノテーションをクラスの先頭に書いてテストを書いてください。

@TestExecutionListeners(
        DependencyInjectionTestExecutionListener::class,
        DirtiesContextTestExecutionListener::class,
        TransactionDbUnitTestExecutionListener::class
)
@RunWith(SpringRunner::class)
@SpringBootTest

最後に

Spring Bootで他にもはまったことがあるので下記リンクを参考にしてみてください。

おすすめ書籍

Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です