Spring Boot/開発/テスト/テスト用設定に切り替える

Spring Boot/開発/テスト/テスト用設定に切り替える

設定の切り替え

Spring Boot ではアプリケーションの基本的な設定が

src/main/resources/application.yml

に格納されているが、本番とテストでは環境を変えたいことが普通である。 このような場合、この application.yml をコピーして

src/main/resources/application-test.yml

を作ればよい。

そしてテスト時にこのように記述し、application-test.yaml 側を明示的に読み込むようにする。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
@ActiveProfiles("test") 
public class CustomerDaoTest {
}

application-hoge.yml を作れば、 @ActiveProfiles(“hoge”) で読み込める仕組みなので、 テスト状況の数だけ自由に設定を切り替えることができる。

実行の Application 設定の切り替え

Spring Boot の設定では何もしなければパッケージの根本にある Application.java つまり @SpringBootApplication アノテーションでマークされているクラスの設定に基づいて動く。

この SpringBootApplication は配下のパッケージ中の指定されているクラスをすべてスキャンしてコントロール下に入れるので単にテストするだけだと少々オーバーな感じになってしまう。

特にそのコントロール対象が多いとテストではその実行に問題が出てくる可能性がある。

例えば Controller のクラスが HttpSession を Autowired していた場合。 これの実行時に HttpSession が必要になるわけであるが、この HttpSession インスタンスは Webサーバ由来なので起動に Webサーバの環境が必要になる。単にデータベースのアクセスをテストしたいだけなのにアプリを起動するのに Webサーバが必要な状況になってしまう。

ここでより下位のテストパッケージ内に SpringBootApplication でマークした不要な設定を除外したクラスを用意することでそちらが優先されて根本にある本番用の SpringBootApplication は読み込まれなくなり依存性を限定してテストを起動することができるようになる。

java/spring/spring_boot/dev/test/setting_switch.txt · 最終更新: 2019-07-01 19:09 by ore