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

Spring Boot JUnit测试无法加载application.yaml配置返回null如何解决

问题原因

你的代码存在以下几个核心问题,导致配置无法加载、返回值为null:

  • 测试类使用了@ExtendWith(MockitoExtension.class),这是Mockito的测试扩展,完全不会启动Spring上下文,所有Spring相关注解包括@Value、@TestProperties都不会生效,自然没法读取配置文件注入属性。
  • @InjectMocks只会注入你声明的@Mock模拟对象,不会处理Spring的@Value注入逻辑,MyUtilityClass里的value字段会一直是null。
  • 你现有代码的getData()方法里写死了data.setValue("Example"),没有用到注入的value字段,如果是笔误想返回配置里的属性,应该改成data.setValue(value)。
  • @TestProperties的属性名是locations,你写的location拼写错误,就算在Spring测试上下文里也不会生效。
  • MyUtilityClass没有添加@Component等Spring组件注解,就算启动Spring容器也不会被扫描纳入管理,@Value同样不会被处理。
修复方案

方案1:使用Spring Boot测试加载上下文(适合需要完整Spring环境的场景)

  1. 给MyUtilityClass加上组件注解:
@Component
public class MyUtilityClass {
    @Value("${value}")
    private String value;

    public DataClass getData() {
        var data = DataClass.builder().build();
        data.setValue(value);
        return data;
    }
}
  1. 修改测试类使用Spring测试扩展,加载上下文:
@SpringBootTest
@ExtendWith(SpringExtension.class)
@TestProperties(locations = "classpath:application.yaml")
public class MyUtilityClassTest {
    @Autowired
    private MyUtilityClass muc;

    @Test
    void test() {
        var response = muc.getData();
        assertEquals("EXPECTED_VALUE", response.getValue());
    }
}

方案2:不启动Spring上下文,手动赋值(适合轻量单元测试场景)

如果不需要启动Spring容器,可以直接给私有value字段赋值,省去启动上下文的开销:

@ExtendWith(MockitoExtension.class)
public class MyUtilityClassTest {
    @InjectMocks
    private MyUtilityClass muc;

    @BeforeEach
    void setUp() throws NoSuchFieldException, IllegalAccessException {
        // 反射给value字段赋值
        Field valueField = MyUtilityClass.class.getDeclaredField("value");
        valueField.setAccessible(true);
        valueField.set(muc, "EXPECTED_VALUE");
    }

    @Test
    void test() {
        var response = muc.getData();
        assertEquals("EXPECTED_VALUE", response.getValue());
    }
}

内容的提问来源于stack exchange,提问作者Agha Salman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:15:03