我已设置integration tests with Gradle,并想使用Spring's "property inheritance"。但是application.properties
中的main
被完全替换了。
目录结构:
src/
intTest/
kotlin/my/package/
SomethingTest.kt
resources/
application.properties
main/
kotlin/my/package/
Something.kt
resources/
application.properties
原因可能是我在application.properties
目录的intTest
和中使用了main
(具有相同的文件名)。但是,如果我使用的是配置文件,则将其称为“ intTest”和一个名为application-intTest.properties
的文件,它也不起作用。个人档案专用文件根本不会被提取。
Gradle配置:
sourceSets {
intTest {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
}
}
configurations {
intTestImplementation.extendsFrom testImplementation
intTestRuntimeOnly.extendsFrom runtimeOnly
}
task integrationTest(type: Test) {
description = 'Runs integration tests.'
group = 'verification'
useJUnitPlatform()
systemProperty 'spring.profiles.active', 'intTest'
testClassesDirs = sourceSets.intTest.output.classesDirs
classpath = sourceSets.intTest.runtimeClasspath
shouldRunAfter test
}
check.dependsOn integrationTest
测试类(基于JUnit 5)带有以下注释:
@ExtendWith(SpringExtension::class)
@ComponentScan
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
如果我将@TestPropertySource
添加到测试类中,则至少会拾取属性文件:
@TestPropertySource(locations= ["classpath:application-intTest.properties"])
但是“属性继承”也不起作用。因此,它基本上与使用application.properties
(无配置文件部分)相同,它将覆盖main
中的所有属性。
在测试中添加@Profile("intTest")
不能解决问题。 @ActiveProfiles("intTest")
也是如此。
如何在集成测试设置中使用“属性继承”?
答案 0 :(得分:3)
原来,问题不是我的Gradle配置,而是我的IntelliJ配置。必须在运行配置中设置活动配置文件-即针对集成测试文件夹中的每个运行配置。这可以通过用@ActiveProfiles("intTest")
注释集成测试类来解决。