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

JUnit5测试时@Value注入值为null 无法读取yml配置该如何解决

问题解决方法

核心原因

你使用了Mockito的@InjectMock注解实例化ControllerClass,该注解会直接手动创建对象,不会触发Spring的属性注入逻辑,因此@Value标注的items字段无法被赋值,和yml配置本身没有直接关系。

解决方法

方案1:走Spring上下文加载(适合集成测试)

这是最常用的测试方案,会真实触发Spring的配置注入逻辑:

  1. 替换测试类注解:删除冗余的@SpringJUnitConfig,把@Mock换成Spring Boot Test提供的@MockBean,删除@InjectMock改为用@Autowired注入Controller
  2. 修正@ActiveProfiles的语法错误,补全缺少的右双引号
  3. 确认application-test.yml放在src/test/resources目录下,确保测试时可以被Spring扫描到

修改后的测试类示例:

@SpringBootTest
@ActiveProfiles("test")
class TestControllerClass {

    @Autowired
    ControllerClass controller;

    @MockBean
    ServiceClass service;

    @Test
    // 测试用例代码
}

方案2:纯单元测试(不启动Spring上下文,速度更快)

如果不需要加载Spring上下文只想做轻量单元测试,可以用Spring提供的反射工具类手动给字段赋值:

@ExtendWith(MockitoExtension.class)
class TestControllerClass {

    @InjectMocks
    ControllerClass controller;

    @Mock
    ServiceClass service;

    @BeforeEach
    void setUp() {
        // 手动给items字段赋值
        ReflectionTestUtils.setField(controller, "items", new String[]{"a", "b", "c", "d"});
    }

    @Test
    // 测试用例代码
}

内容的提问来源于stack exchange,提问作者r-developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:05