首页 > 解决方案 > Spring Boot JUnit 和 @TestPropertySource 使用多个属性文件

问题描述

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 +其他的问题并尝试了但没有运气。

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

标签: springspring-bootjunit4

解决方案


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

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

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

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

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


推荐阅读