使用@ActivateProfiles在JUnit5测试中加载的SpringBoot属性文件不正确

问题描述 投票:0回答:1

我尝试使用Spring配置文件名称模式使用其他配置文件测试配置文件。

这是Spring项目的结构:

src/main
    java/foo/bar
        config
            RestClientConfig.java
            ApiProperties.java
    resources
        application.yml
        application-local.yml

application.yml

api:
  authentication-hash: fds456f4ds6f
  rest-api-uri: https://example.org/api

application-local.yml

api:
  authentication-hash: xxxxxxxxx
  rest-api-uri: https://localhost:8081/api

ApiProperties.java

@Configuration
@ConfigurationProperties(prefix = "boond")
@Data
public class BoondProperties {

    @ToString.Exclude // confidentiel
    private String authenticationHash;
    private URI restApiUri;

}

其他模板配置

@Configuration
public class RestClientConfig {

    private final ApiProperties apiProperties;

    public RestClientConfig(apiProperties apiProperties) {
        this.apiProperties = apiProperties;
    }

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {

        builder.defaultHeader("Authorization", "Basic " +
                apiProperties.getAuthenticationHash());
        builder.uriTemplateHandler(
                new DefaultUriBuilderFactory(apiProperties.getRestApiUri().toString()));
        return builder.build();
    }

}

[当我使用Junit5运行以下单元测试时,从application.yml而不是application-local.yml加载属性

@SpringBootTest
@ActiveProfiles("local")
class RestClientConfigTest {
    @Autowired
    RestClientConfig restClientConfig;
    @Autowired
    RestTemplateBuilder restTemplateBuilder;

    @Test
    void rest_client_should_be_able_to_contact_api() {
        RestTemplate apiRestTemplate = restClientConfig.restTemplate(restTemplateBuilder);
        ResponseEntity<String> dictionary = apiRestTemplate.getForEntity("/api/dictionary", String.class);
        assertEquals("OK", dictionary);
    }
}
java spring spring-boot spring-test junit5
1个回答
0
投票

基于特定于配置文件的documentation yaml配置进行的操作有所不同。这里遵循的约定适用于.properties文件。

请参阅共享文档

© www.soinside.com 2019 - 2024. All rights reserved.