He creado pruebas de integración con Gradle y quiero usar "la herencia de propiedades" de la primavera . Pero el application.properties
de main
queda completamente reemplazado.
Estructura de directorios:
src/
intTest/
kotlin/my/package/
SomethingTest.kt
resources/
application.properties
main/
kotlin/my/package/
Something.kt
resources/
application.properties
La razón podría ser que estoy usando application.properties
(con el mismo nombre de archivo) en el intTest
y en el main
directorio. Sin embargo, si estoy usando un perfil, vamos a llamarlo "intTest" y un archivo llamado application-intTest.properties
, no funciona bien. El archivo de perfil específico no es recogido en absoluto.
config 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
La clase de prueba (basado en JUnit 5) se anota con:
@ExtendWith(SpringExtension::class)
@ComponentScan
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
Si añado @TestPropertySource
a mi clase de prueba del archivo de propiedades se recogió al menos:
@TestPropertySource(locations= ["classpath:application-intTest.properties"])
Pero la "herencia propiedades" no funciona bien. Por lo que es básicamente lo mismo que usar application.properties
(sin una parte de perfil), lo que anula todas las propiedades de main
.
Añadiendo @Profile("intTest")
a mi prueba no resuelve el problema. Lo mismo se aplica para @ActiveProfiles("intTest")
.
¿Cómo puedo usar "propiedades de herencia" con mi configuración de la prueba de integración?
Resultó que el problema no era mi config Gradle pero mi config IntelliJ. El perfil activo tiene que ser establecido en la configuración de ejecución - a saber, para todos y cada configuración de ejecución en la carpeta de prueba de integración. Esto se puede resolver mediante la anotación de las clases de prueba con la integración @ActiveProfiles("intTest")
.