我有一个Spring-Boot应用程序,默认属性在类路径的 application.properties
文件中设置(src / main / resources / application.properties) .
我想在我的JUnit测试中覆盖一些默认设置,其中包含在 test.properties
文件中声明的属性(src / test / resources / test.properties)
我通常会为我的Junit测试提供专用的Config类,例如:
package foo.bar.test;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
}
我首先想到在TestConfig类中使用 @PropertySource("classpath:test.properties")
可以解决问题,但这些属性不会覆盖application.properties设置(请参阅Spring-Boot参考文档 - 23. Externalized Configuration) .
然后我在调用测试时尝试使用 -Dspring.config.location=classpath:test.properties
. 这很成功 - 但我不想为每次测试执行设置此系统属性 . 因此我把它放在代码中
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
static {
System.setProperty("spring.config.location", "classpath:test.properties");
}
}
不幸的是,再次没有成功 .
必须有一个关于如何使用 test.properties
覆盖JUnit测试中的 application.properties
设置的简单解决方案,我必须忽略它 .
6 回答
您还可以在编写JUnit的src / test / resources中创建application.properties文件 .
您可以使用
@TestPropertySource
覆盖application.properties
中的值 . 从它的javadoc:例如:
您还可以使用meta-annotations外部化配置 . 例如:
如果使用以下注释,Spring Boot会自动加载
src/test/resources/application.properties
因此,将
test.properties
重命名为application.properties
以使用自动配置 .[更新:覆盖某些测试属性]
添加
src/main/resources/application-test.properties
.使用
@ActiveProfiles("test")
注释测试类 .根据定义的规则here,这会将
application.properties
和application-test.properties
属性加载到测试用例的应用程序上下文中 .演示 - https://github.com/mohnish82/so-spring-boot-testprops
否则,我们可能会更改默认属性配置程序名称,设置属性
spring.config.name=test
然后具有类路径资源src/test/test.properties
我们的org.springframework.boot.SpringApplication
本机实例将从此分离的test.properties中自动配置,忽略应用程序属性;好处:自动配置测试;
缺点:在C.I.公开“spring.config.name”属性 . 层
参考:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
TLDR:
那么做的是使用标准
src/main/resources/application.properties
以及src/test/resources/application-default.properties
,其中我覆盖了所有测试的一些设置 .整个故事
我遇到了同样的问题,到目前为止还没有使用配置文件 . 现在做这件事似乎很麻烦,并且记得宣布这个简介 - 这很容易被遗忘 .
诀窍是,利用特定配置文件
application-<profile>.properties
覆盖常规配置文件中的设置 . 见https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties