Spring 用于验证嵌套配置属性的引导集成测试
Spring Boot integration test for validating nested configuration properties
使用 Spring Boot 2.6 我遇到了以下问题。
我定义了一个 ConfigurationProperties
class 来映射 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;
}
当您从默认应用程序配置文件(application.properties
内 src/main/resources
)继承任何 属性 时,您可以在 [=13] 内放置一个空的 application.properties
文件=] 以避免继承任何值。
使用 Spring Boot 2.6 我遇到了以下问题。
我定义了一个 ConfigurationProperties
class 来映射 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;
}
当您从默认应用程序配置文件(application.properties
内 src/main/resources
)继承任何 属性 时,您可以在 [=13] 内放置一个空的 application.properties
文件=] 以避免继承任何值。