Java测试中无法读取application.properties路径参数的问题
看起来你遇到了测试环境下Spring无法解析${routing.folder}配置的典型问题——正常运行时Spring上下文会自动加载配置文件,但仅用@ContextConfiguration(classes = ...)的测试类可能没触发这个逻辑,导致配置项无法被解析。下面给你几个靠谱的解决方案:
方案1:给测试类添加配置文件加载注解
直接在你的SepaRoutingFromXMLTest.java上加上@PropertySource,明确指定要加载的application.properties文件:
@RunWith(SpringRunner.class) @ContextConfiguration(classes = {SepaRoutingUtils.class}) @PropertySource("classpath:application.properties") // 关键:加载类路径下的配置文件 public class SepaRoutingFromXMLTest { // 你的测试方法和注入逻辑 }
如果你的项目是Spring Boot项目,更推荐用@SpringBootTest替代@ContextConfiguration,它会自动帮你加载所有默认配置文件(包括application.properties):
@RunWith(SpringRunner.class) @SpringBootTest // 自动加载配置,无需额外指定 public class SepaRoutingFromXMLTest { // 测试代码 }
方案2:引入专门的配置类
如果你的项目里有负责加载配置的类(比如带有@Configuration注解的类),把它加入到@ContextConfiguration的classes参数中:
@RunWith(SpringRunner.class) // AppConfig是你项目中加载properties的配置类 @ContextConfiguration(classes = {SepaRoutingUtils.class, AppConfig.class}) public class SepaRoutingFromXMLTest { // 测试代码 }
对应的AppConfig类示例:
@Configuration @PropertySource("classpath:application.properties") public class AppConfig { // 这里可以定义Bean,或者直接用@Value注入配置供其他类使用 }
方案3:使用测试专用配置文件
如果不想在测试中用生产环境的配置,你可以在src/test/resources下创建application-test.properties,然后在测试类中指定加载这个文件:
@RunWith(SpringRunner.class) @ContextConfiguration(classes = {SepaRoutingUtils.class}) @TestPropertySource(locations = "classpath:application-test.properties") public class SepaRoutingFromXMLTest { // 测试代码 }
这样测试时会优先使用测试专用的配置,避免影响生产配置。
另外还要确认一下:SepaRoutingUtils类是否被Spring容器管理(比如带有@Component/@Service等注解),并且配置值是通过@Value("${routing.folder}")正确注入的——这两个前提如果不满足,配置也无法正常读取。
内容的提问来源于stack exchange,提问作者AndreFontaine

