【发布时间】:2022-01-19 15:21:42
【问题描述】:
使用 Spring Boot 2.6 我偶然发现了以下问题。
我定义了一个ConfigurationProperties 类,它映射来自application.yml 的属性。该配置还包括验证注释。
my.prefix.sample.username 之类的缺失属性会阻止应用程序启动,这很好。
然而,在基本的集成测试中,这不起作用。如果src/test/resources/application-integration-test.yml 中缺少my.prefix.sample.password,我预计下面的测试会失败。但它通过了,所以看起来好像验证真的没有启动。但是如果我删除my.prefix.sample.url,那么测试就会失败。
// integration test
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ActiveProfiles("integration-test")
public class ApplicationIT {
@Test
void contextLoads() {
}
}
// the ConfigurationProperties classes
@Configuration
@ConfigurationProperties(prefix = "my.prefix")
@Getter
@Setter
@Validated
public class ApplicationConfiguration {
@NotBlank
@URL
private String url;
@NestedConfigurationProperty
@Valid
private SampleConfiguration sample;
}
@Getter
@Setter
public class SampleConfiguration {
@NotBlank
private String username;
@NotBlank
private String password;
}
【问题讨论】:
-
my.prefix.sample.password是否在默认应用程序属性文件application.properties中定义?如果是这样,您将继承此值。您可以通过将ApplicationConfiguration注入集成测试并将密码打印到控制台来轻松检查当前值。 -
@rieckpil 你是对的。我还刚刚发现这些值是从现有的
src/main/resources/application.yml和src/test/resources/application-integration-test.yml中“合并”的。你知道是否可以忽略“生产”文件吗?