【问题标题】:Spring Boot integration test for validating nested configuration properties用于验证嵌套配置属性的 Spring Boot 集成测试
【发布时间】: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.ymlsrc/test/resources/application-integration-test.yml 中“合并”的。你知道是否可以忽略“生产”文件吗?

标签: spring-boot spring-test


【解决方案1】:

当您从默认应用程序配置文件(application.propertiessrc/main/resources)继承任何属性时,您可以在 src/test/resources 内放置一个空的 application.properties 文件以避免继承任何值。

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 1970-01-01
    • 2021-05-10
    • 2017-11-12
    • 2017-02-03
    • 2022-06-28
    • 2018-07-04
    • 2021-01-24
    • 2016-12-30
    相关资源
    最近更新 更多