java - 使用 @ActivateProfiles 在 JUnit5 测试中加载的 SpringBoot 属性文件不正确
问题描述
我尝试使用 Spring 配置文件名模式测试具有不同配置文件的配置文件。
这是Spring项目的结构:
src/main
java/foo/bar
config
RestClientConfig.java
ApiProperties.java
resources
application.yml
application-local.yml
应用程序.yml
api:
authentication-hash: fds456f4ds6f
rest-api-uri: https://example.org/api
应用程序-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);
}
}
解决方案
根据文档,特定于配置文件的 yaml 配置以不同方式完成。此处遵循的约定适用于.properties
文件。
请参考共享文档
推荐阅读
- cakephp-4.x - 升级到 4.1 后 CakePHP 选择不再执行
- javascript - 重构多层次内容呈现系统
- apache-spark - Spark 优雅地停止和退出(1)
- php - (自定义模块的)自定义多产品选项卡未显示在 magento2 后端管理的产品页面上
- excel - 单元格值的输出连接
- python - 如何在列表列表中找到三重奏?
- html - 如何通过 Jquery 在 html 中选择第 n 个标签?
- python - featuretools 生成空列,而应该有值
- c# - 用于空密码的 C# MySQL MySqlConnection 连接字符串
- java - Java:SecretKey 到 String 并重建回 SecretKey 会产生不同的解密结果