Как переопределить application.properties в тесте интеграции Spring Boot? - PullRequest
3 голосов
/ 29 марта 2019

Я настроил интеграционные тесты с Gradle и хочу использовать «наследование свойств» Spring . Но 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").

Как я могу использовать "наследование свойств" с моей настройкой интеграционного теста?

1 Ответ

3 голосов
/ 29 марта 2019

Оказалось, что проблема была не в моем конфиге Gradle, а в моем конфиге IntelliJ. Активный профиль должен быть установлен в конфигурации прогона, а именно для каждой конфигурации прогона в папке тестов интеграции. Эту проблему можно решить, пометив классы интеграционных испытаний с помощью @ActiveProfiles("intTest").

...