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 15.1 TEST

spring boot 笔记

导入spring-boot-starter-test依赖报错?

Spring Boot 单元测试

Spring Boot Test 无法使用 JUnit 5 为自定义集成测试源集加载应用程序上下文

spring boot1.5.6 测试类1