Me tomó un tiempo darme cuenta y los recursos en línea no eran excelentes. Así que quería documentar mi solución.
Este es un simple script de compilación de Gradle que tiene un conjunto de fuentes intTest además de los conjuntos de fuentes principal y de prueba:
apply plugin: "java"
sourceSets {
// Note that just declaring this sourceset creates two configurations.
intTest {
java {
compileClasspath += main.output
runtimeClasspath += main.output
}
}
}
configurations {
intTestCompile.extendsFrom testCompile
intTestRuntime.extendsFrom testRuntime
}
task intTest(type:Test){
description = "Run integration tests (located in src/intTest/...)."
testClassesDir = project.sourceSets.intTest.output.classesDir
classpath = project.sourceSets.intTest.runtimeClasspath
}
java/withIntegrationTests
muestra en la distribución completa de Gradle.Así es como lo logré sin usar
configurations{ }
.Probado con: Gradle 1.4 y Gradle 1.6
fuente
java { srcDir 'src/integrationtest/java' } resources { srcDir 'src/integrationtest/resources' }
no es relevante ya que solo redeclaressrc/<sourceSetName>/...
asrc/integrationtest/...
: aquí: cambiar la T mayúscula a un menor tcompileClasspath += sourceSets.main.runtimeClasspath
está combinando dos conjuntos de archivos. No existe una resolución de conflictos habitual para las dependencias. Puede terminar con dos versiones de la misma biblioteca. Extender las configuraciones ayudará con eso.Para resumir las dos respuestas anteriores (obtenga la mejor y la mínima viabilidad de ambos mundos):
algunas palabras cálidas primero:
primero, necesitamos definir
sourceSet
:a continuación, expandimos el
sourceSet
fromtest
, por lo tanto usamos eltest.runtimeClasspath
(que incluye todas las dependencias detest
ANDtest
) como classpath para el derivadosourceSet
:sourceSets.integrationTest.runtimeClasspath
es necesaria, pero debería ser irrelevante ya queruntimeClasspath
siempre se expandeoutput + runtimeSourceSet
, no la entiendasdefinimos una tarea dedicada solo para ejecutar pruebas de integración:
Configure las
integrationTest
clases de prueba y el uso de classpaths. Los valores predeterminados deljava
complemento utilizan eltest
sourceSet
(opcional) ejecución automática después de la prueba
(opcional) agregue dependencia de
check
(para que siempre se ejecute cuandobuild
ocheck
se ejecuten)(opcional) agregue java, recursos para
sourceSet
admitir la detección automática y cree estos "parciales" en su IDE. es decir, IntelliJ IDEA creará automáticamentesourceSet
directorios java y recursos para cada conjunto si no existe:tl; dr
refiriéndose a:
Desafortunadamente, el código de ejemplo en github.com/gradle/gradle/subprojects/docs/src/samples/java/customizedLayout/build.gradle o … / gradle /… / withIntegrationTests / build.gradle parece no manejar esto o tiene una / más complejo / para mí no hay una solución más clara de todos modos!
fuente
compileTestJava
classesDir
se migró aclassesDirs
en gradle 5El complemento nebula-facet elimina el texto estándar:
Para las pruebas de integración específicamente, incluso esto se hace por usted , solo aplique:
Los enlaces del portal de complementos de Gradle para cada uno son:
fuente
Si estas usando
Para que IntelliJ reconozca el conjunto de fuentes personalizado como raíz de fuentes de prueba:
fuente
Esto es lo que me funciona a partir de Gradle 4.0.
A partir de la versión 4.0, Gradle ahora usa directorios de clases separados para cada idioma en un conjunto de fuentes. Entonces, si su script de compilación usa
sourceSets.integrationTest.output.classesDir
, verá la siguiente advertencia de desaprobación.Para deshacerse de esta advertencia, simplemente cambie a
sourceSets.integrationTest.output.classesDirs
. Para obtener más información, consulte las notas de la versión de Gradle 4.0 .fuente
Soy nuevo en Gradle y uso Gradle 6.0.1 JUnit 4.12. Esto es lo que se me ocurrió para resolver este problema.
Observe que se hace referencia a la fuente principal y la fuente de prueba por separado, una debajo
main
y otra debajotest
.El
testImplementation
elemento de abajodependencies
solo se usa para compilar la fuente entest
. Si su código principal en realidad tuviera una dependencia de JUnit, también debería especificarimplementation
endependencies
.Tuve que especificar el
repositories
sección para que esto funcione, dudo que sea la mejor / única forma.fuente