配置类单元测试中JmsMessageGatewayProperties属性注入为空问题排查
测试类未加载目标配置文件
单元测试默认不会自动读取camel.properties,得手动指定加载。如果是Spring Boot测试,要在测试类上加@PropertySource("classpath:camel.properties");如果是普通JUnit测试,需要手动读取配置文件并绑定到JmsMessageGatewayProperties实例。属性绑定前缀不匹配
检查JmsMessageGatewayProperties上的@ConfigurationProperties(prefix = "xxx")注解,确保prefix值和camel.properties里的配置前缀完全一致。比如配置是jms.broker-url=xxx,前缀就得设为jms,否则Spring无法识别并绑定属性。未启用配置属性绑定功能
测试上下文里没开启配置属性绑定的话,Spring不会自动注入配置值。需要在测试类上加@EnableConfigurationProperties(JmsMessageGatewayProperties.class),或者确保JmsMessageGatewayConnectionConfig已经正确引入该属性类并被测试上下文扫描到。配置文件位置不对
确认camel.properties是否放在src/test/resources目录下——单元测试默认优先读取test目录下的资源文件,如果文件在src/main/resources,测试环境可能访问不到,要么移到test目录,要么在@PropertySource里指定完整路径。属性类字段与配置键不匹配
配置文件里的键是短横线分隔(比如jms.broker-url),属性类的字段得用驼峰命名(brokerUrl),如果字段名拼写错误、格式不匹配,会导致绑定失败,属性值保持为空。
内容的提问来源于stack exchange,提问作者Jonathan Hagen

