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.propertiessrc/main/resources)继承任何 属性 时,您可以在 [=13] 内放置一个空的 application.properties 文件=] 以避免继承任何值。