monolithic kernel

Spring Boot で本番環境向けの @ConfigurationProperties をテストする

開発環境向けの @ConfigurationProperties はテストしていたのだが、本番環境向けも内容を手元や CI で検証したくなったので調べた。結論としては、以下のページの方法に従ったらできた。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { MyConfigurationPropertiesTest_1.TestConfiguration.class })
@ActiveProfiles("happy-path")
public class MyConfigurationPropertiesTest_1 {

    @Autowired
    private MyConfigurationProperties properties;

    @Test
    public void should_Populate_MyConfigurationProperties() {
        assertThat(properties.getSomeMandatoryProperty()).isEqualTo("123456");
        assertThat(properties.getSomeOptionalProperty()).isEqualTo("abcdef");
        assertThat(properties.getSomeDefaultProperty()).isEqualTo("overwritten");
    }

    @EnableConfigurationProperties(MyConfigurationProperties.class)
    public static class TestConfiguration {
        // nothing
    }
}

MyConfigurationProperties@EnableConfigurationProperties した configuration class をテスト用に定義して、それを @SpringBootTestclasses に指定してやれば、特定の @ConfigurationProperties だけを読み込むテストを書ける。あとは、@ActiveProfiles で読み込みたい profile を指定してやればよい。

いざ本番リリースしようとしたら設定ファイルの記述をミスっていて立ち上がらない、みたいなのを防げて便利。