You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JUnit 5测试ConfigurationProperties遇空指针:YAML配置注入失败求助

问题排查与解决步骤

1. 启用配置属性绑定功能

你的配置类虽然加了@ConfigurationProperties和@Component,但测试环境仅通过@ContextConfiguration加载类不会自动触发配置属性绑定逻辑。需要在测试类上添加@EnableConfigurationProperties(ExcludePopulationProperties.class),明确开启该类的配置绑定能力:

@EnableConfigurationProperties(ExcludePopulationProperties.class)
@ExtendWith(SpringExtension.class)
class YamlTest {

    @Autowired
    private ExcludePopulationProperties excludePopulationProperties;

    @Test
    void testExternalConfiguration() {
        Map<String, String> map = excludePopulationProperties.getTest().getService().getComputator().getPopulation().getExclude();
        assertNotNull(map);
    }
}

2. 修复YAML文件加载问题

@TestPropertySource默认不支持加载YAML格式文件,仅能处理.properties类型。你可以选择两种方案解决:

  • 方案一:改用@SpringBootTest
    Spring Boot的@SpringBootTest注解会自动扫描src/test/resources下的配置文件,无需手动指定路径。如果用环境隔离配置,只需激活对应profile即可:

@SpringBootTest(properties = {"spring.profiles.active=test"})
class YamlTest {

@Autowired
private ExcludePopulationProperties excludePopulationProperties;

@Test
void testExternalConfiguration() {
    Map<String, String> map = excludePopulationProperties.getTest().getService().getComputator().getPopulation().getExclude();
    assertNotNull(map);
}

}

注意:将配置文件命名为`application-test.yaml`放在`src/test/resources`目录下,测试环境会优先读取该文件。

- **方案二:使用YAML配置初始化器**
若不想用`@SpringBootTest`,可通过初始化器加载YAML文件,同时修正配置文件名(去掉多余下划线):
```java
@ContextConfiguration(
      classes = ExcludePopulationProperties.class,
      initializers = ConfigDataApplicationContextInitializer.class
)
@EnableConfigurationProperties(ExcludePopulationProperties.class)
@ExtendWith(SpringExtension.class)
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yaml"})
class YamlTest {
  // 测试代码不变
}

3. 验证Lombok注解有效性

确认项目已正确引入Lombok依赖,且IDE安装了Lombok插件。@Data注解需要生成getter/setter方法,否则Spring无法为嵌套类(如Test、Service等)注入属性,会导致字段为null。

4. 检查配置文件路径与格式

  • 确保YAML文件放在src/test/resources目录下,而非src/main/resources(测试环境优先读取test目录资源)。
  • 检查YAML缩进是否统一(用空格而非制表符),格式错误会导致配置无法被解析。

内容的提问来源于stack exchange,提问作者Paul Marcelin Bejan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:39:32