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つです。
-
@TestExecutionListeners
-
@RunWith
-
@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 BootでHikariCPを使ってコネクションプールを設定する方法
- Spring Boot(RequestMapping, SqlResultSetMapping)をKotlinで実装してハマった事
- Spring Bootで環境毎にapplication.propertiesを読み込む方法
- Spring Data JPAでカスタムRepositoryインターフェースを実装する方法
おすすめ書籍
Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す