Spring Boot JUnit 和 @TestPropertySource 使用多个属性文件
Posted
技术标签:
【中文标题】Spring Boot JUnit 和 @TestPropertySource 使用多个属性文件【英文标题】:Spring Boot JUnit and @TestPropertySource using multiple property files 【发布时间】:2019-03-20 08:02:55 【问题描述】:Spring Boot 2.0.3.RELEASE
有多个属性文件要处理.. application.properties 和 application-DEV.properties
在 Junit 测试中使用注释 @TestPropertySource 我只能让它读取一个文件:
@TestPropertySource("file:C:\\Users\\user\\eclipse-workspace\\one2one_httpCall\\src\\main\\resources\\application-DEV.properties")
按预期工作
但是我需要两个属性文件,但我确实看到了位置选项,但没有看到多个文件的示例.. 尝试了不同的选项,但没有一个起作用:
@TestPropertySource(locations = "classpath:application-DEV.properties;classpath:application.properties")
尝试了几种我没有发布的方法,甚至尝试使用@TestPropertySource 两次但错误说你不能使用它两次。
尝试使用@PropertySource,因为你可以使用它两次,但由于这是一个 Junit 测试,所以它不起作用。看了一堆关于stacktrace + others的问题并尝试了但没有运气。
所以我的问题是如何通过@TestPropertySource 注解使用两个属性文件?
【问题讨论】:
【参考方案1】:如果您查看@TestPropertySource
的定义,您将看到locations
的类型为String []
。因此,如果需要传递多个值,则必须使用数组:
@TestPropertySource(locations = "classpath:application.properties", "classpath:application-DEV.properties" )
另外,请注意声明属性文件的顺序。如TestPropertySource docs中所述:
每个位置都将作为其自己的属性源添加到封闭的环境中,按照声明的顺序。
因此,您可能希望在之后声明您的 DEV 属性,以避免它们被您的生产属性覆盖。
【讨论】:
以上是关于Spring Boot JUnit 和 @TestPropertySource 使用多个属性文件的主要内容,如果未能解决你的问题,请参考以下文章
导入spring-boot-starter-test依赖报错?