![見出し画像](https://assets.st-note.com/production/uploads/images/11858687/rectangle_large_type_2_63d59b4655b3cc59e4ed9e74d4c8d0f4.png?width=1200)
【SpringBoot 1.5.x】@TestPropertySource でYAMLファイルが読めなくてハマった話
どうやらパターンがあったので、備忘録としてまとめを。
たぶん、2系にあげるときに、ここ対応したこと忘れそうなので。。
①テストでDBは使ってないんだけど、起動時に読み込んじゃうので黙殺したいケース
特に変わったConfigとか使わないからmainと同じConfigで良いけど、DBは使わないケースなんかが当てはまるかと。
やることは2つ
1-1. テストケースに @ActiveProfile("test") を追加する
『test』じゃなくても、このあとにYAMLに記述する『profiles.active』の値と合ってればいいです。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { TestApplication.class }) // ここでApplicationクラス呼んでなければこんなことしなくても良いかも。
@TestPropertySource(locations = "/application-test.yml")
@ActiveProfiles("test")
public class HogeHogeIntegrationTest {
1-2. application-test.yml に『profiles.active』を記述する
spring:
profiles.active: test
参考:Spring Boot - テスト時に読み込むDBを変更する - Testによって更に設定を分岐させる
②@ContextConfiguration を使って読み込んでる場合
Controllerとかのテストが該当するかも。
以下のstackoverflowの回答を追加すれば出来る環境もあると思いますが、弊環境は①のパターンと組み合わせだった。
2-1. テストクラスにアノテーション諸々を追加する
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@TestPropertySource(locations = "/application-test.yml")
@ContextConfiguration(classes = { TestApplication.class, TestDataSourceConfig.class,
SecurityConfig.class }, initializers = ConfigFileApplicationContextInitializer.class)
@ActiveProfiles("test")
initializers = ConfigFileApplicationContextInitializer.class がポイント。
2-2. application-test.yml に『profiles.active』を記述する
これは1-2と同じなので割愛
たぶん。src/test/resources の下に置くのがapplication.yml だった場合、こんな設定とかいらないかもしれないけど、同名ファイルがあるってVSCodeは怒るし、やってる方もいつか間違えそうなので、ファイル名は分けたい派です。
では快適なSpringbootライフを。そろそろ2系にあげたい。
この記事が気に入ったらサポートをしてみませんか?