2019年11月7日

ここ数年で何回かぶち当たってたことが解決したので備忘録として。内容はタイトルの通りです。 @SpringBootTest を使ってテスト書けば設定ファイルを読み込んでくれるので悩む必要はないんですけど、大人の事情でそういうことができない場合もありますよね。そうすると当然、設定ファイルを読み込んでくれないわけです。

今回、@SpringBootTest を使ってテストを書かなくても設定ファイルを読み込めるようなテストを書きました。

app.properties

app.domain=b1a9idps.com

AppProperties.java

@ConfigurationProperties("app")
public class AppProperties {
    private String domain;

    // getterとsetterは省略
}

TestConfig.java

@TestConfiguration
@EnableConfigurationProperties(value = AppProperties.class)
public class TestConfig {}

ConfigurationPropertyTest.java

@ExtendWith(SpringExtension.class)
@TestPropertySource(properties = "spring.config.name=app")
@ContextConfiguration(classes = {TestConfig.class}, initializers = ConfigFileApplicationContextInitializer.class)
class ConfigurationPropertyTest {

    @Autowired
    private AppProperties appProperties;

    @Test
    void getValue() {
        assertEquals("b1a9idps.com", appProperties.getDomain());
    }
}

おまけ(メソッドに @ConfigurationProperties を付与している場合)

app.properties

app.app.name=uchitate

AppAppProperties.java

public class AppAppProperties {
    private String name;

    // getterとsetterは省略
}

AppAppConfig.java

@Configuration
public class AppAppConfig {

    @Bean
    @ConfigurationProperties("app.app")
    public AppAppProperties appAppProperties() {
        return new AppAppProperties();
    }
}
Powered by Fruition