编程语言
首页 > 编程语言> > java-如何在Spring Boot集成测试中覆盖application.properties?

java-如何在Spring Boot集成测试中覆盖application.properties?

作者:互联网

我已经设置了integration tests with Gradle,并希望使用Spring’s “property inheritance”.但是main中的application.properties被完全替换了.

目录结构:

src/
  intTest/
    kotlin/my/package/
      SomethingTest.kt
    resources/
      application.properties
  main/
    kotlin/my/package/
      Something.kt
    resources/
      application.properties

原因可能是我在intTest和主目录中使用了application.properties(具有相同的文件名).但是,如果我使用的是配置文件,则将其称为“ 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”)同样适用.

如何在集成测试设置中使用“属性继承”?

解决方法:

原来,问题不是我的Gradle配置,而是我的IntelliJ配置.必须在运行配置中设置活动配置文件-即针对集成测试文件夹中的每个运行配置.这可以通过使用@ActiveProfiles(“ intTest”)注释集成测试类来解决.

标签:spring-boot,gradle,integration-testing,spring,java
来源: https://codeday.me/bug/20191108/2005979.html