使用多个属性文件的Spring Boot JUnit和@TestPropertySource

时间:2018-10-15 20:36:54

标签: spring spring-boot junit4

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")

按预期工作

但是我需要两个属性文件,但我确实看到了locations选项,但是没有看到一个以上文件的示例..尝试了不同的选项,但没有一个起作用:

@TestPropertySource(locations = "classpath:application-DEV.properties;classpath:application.properties")

尝试了几种我不发布的方法,甚至尝试使用@TestPropertySource两次,但错误提示您不能两次使用。

使用@PropertySource进行了尝试,因为您可以使用它两次,但是由于这是一次Junit测试,因此无法使用。看着关于stacktrace和其他问题的一堆问题,尝试过但没有运气。

所以我的问题是如何通过@TestPropertySource批注使用两个属性文件?

1 个答案:

答案 0 :(得分:3)

如果查看@TestPropertySource的定义,您将看到locations的类型为String []。因此,如果需要传递多个值,则必须使用数组:

@TestPropertySource(locations = { "classpath:application.properties", "classpath:application-DEV.properties" })

此外,请注意声明属性文件的顺序。如TestPropertySource docs中所述:

  

每个位置都将作为其自身的属性源添加到封闭的环境中,按照声明的顺序

因此,您可能希望在之后声明DEV属性,以避免被生产属性覆盖。