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

@WebMvcTest无法解析@Value注解配置值的问题求助

解决建议

1. 确保测试环境加载配置文件

在测试类上添加@TestPropertySource注解,明确指定配置文件路径,让Spring能正确读取配置值:

@WebMvcTest(controllers = TodoController.class)
@TestPropertySource(locations = "classpath:application.properties")
@ContextConfiguration(classes = {MessageSourceConfig.class, TodoController.class},
        initializers = ConfigDataApplicationContextInitializer.class)
class TodoControllerTest {
    // ... 原有代码
}

如果使用测试专用配置文件,可将路径指定为src/test/resources下的对应文件。

2. 修正@Value注入的类型匹配问题

配置文件中spring.messages.basename是单个字符串值,用String[]接收虽支持自动转换,但显式处理更稳妥,避免潜在解析问题:
修改MessageSourceConfig:

@Configuration
public class MessageSourceConfig {

    @Value("${spring.messages.basename}")
    private String basename;

    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

        messageSource.setBasenames(basename.split(",")); // 兼容多配置用逗号分隔的场景
        messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());

        return messageSource;
    }
}

3. 排除Spring自动配置的MessageSource

@WebMvcTest默认会自动配置MessageSource,可能覆盖自定义配置。可在注解中排除自动配置类,确保自定义的MessageSourceConfig生效:

@WebMvcTest(controllers = TodoController.class, excludeAutoConfiguration = MessageSourceAutoConfiguration.class)
@TestPropertySource(locations = "classpath:application.properties")
@ContextConfiguration(classes = {MessageSourceConfig.class, TodoController.class})
class TodoControllerTest {
    // ... 原有代码
}

4. 验证配置文件位置

确认application.properties存在于src/main/resources或src/test/resources目录下。若测试需单独配置,可在src/test/resources下创建同名文件,保证测试时能读取到正确的spring.messages.basename值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:52:34