¿Cómo ejecutar pruebas JUnit con Gradle?

98

Actualmente tengo el siguiente archivo build.gradle :

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}    


Este archivo build.gradle es para mi repositorio aquí . Todos mis archivos principales están en src / model / y sus respectivas pruebas están en test / model .

¿Cómo agrego una dependencia JUnit 4 correctamente y luego ejecuto esas pruebas en las carpetas de pruebas / modelo ?

Wang-Zhao-Liu QM
fuente

Respuestas:

106

¿Cómo agrego una dependencia de junit 4 correctamente?

Suponiendo que se está resolviendo contra un repositorio estándar de Maven (o equivalente):

dependencies {
    ...
    testCompile "junit:junit:4.11"  // Or whatever version
}

¿Ejecutar esas pruebas en las carpetas de pruebas / modelo?

Defina su fuente de prueba establecida de la misma manera:

sourceSets {
    ...

    test {
        java {
            srcDirs = ["test/model"]  // Note @Peter's comment below
        }
    }
}

Luego invoque las pruebas como:

./gradlew test

EDITAR: Si está usando JUnit 5 en su lugar, hay más pasos para completar, debe seguir este tutorial .

Oliver Charlesworth
fuente
8
srcDirs = ["test/model"]es un poco más preciso porque elimina el directorio de fuentes de prueba predeterminado, mientras que srcDir "test/model"agrega otro directorio. Lo mismo para el mainconjunto de fuentes.
Peter Niederwieser
49

Si configura su proyecto con la estructura predeterminada del paquete gradle, es decir:

src/main/java
src/main/resources
src/test/java
src/test/resources

entonces no necesitará modificar sourceSets para ejecutar sus pruebas. Gradle se dará cuenta de que sus clases de prueba y recursos están en src / test. A continuación, puede ejecutar como dice Oliver anteriormente. Una cosa a tener en cuenta: tenga cuidado al configurar archivos de propiedades y ejecutar sus clases de prueba tanto con gradle como con su IDE. Yo uso Eclipse, y cuando ejecuto JUnit desde él, Eclipse elige una ruta de clase (el directorio bin) mientras que gradle elige otra (el directorio de compilación). Esto puede generar confusión si edita un archivo de recursos y no ve su cambio reflejado en el tiempo de ejecución de la prueba.

DivDiff
fuente
2
Para dirigir los archivos de compilación de Eclipse al mismo directorio que Gradle (puede evitar algunos errores frustrantes): Proyecto -> Propiedades -> Ruta de compilación de Java -> Carpeta de salida predeterminada: reemplace "bin" por "compilación". Sin embargo ... en mi experiencia, esto parece tener el desconcertante hábito de "deslizarse hacia atrás" al "contenedor" predeterminado de vez en cuando inesperadamente. Sería bueno saber si hay una manera de hacer que Eclipse use "build" por defecto.
Mike
2
@ mike-rodent hasta donde yo sé, se desaconseja explícitamente compartir la misma ruta de compilación para eclipse y gradle (ver, por ejemplo, discusion.gradle.org/t/… )
mtraut
¡De acuerdo, estoy corregido! ... y supongo que no se gana nada compilando en el mismo directorio. Para la mayoría de los propósitos, la funcionalidad del generador de eclipses se convierte en una mera herramienta de validación: "Ups, esto no se compilará debido a x, y y z".
Mike
1
@DivDiff mi estructura de carpetas src está configurada de la misma manera mencionada anteriormente, pero aún así, cuando hago la prueba de Gradle, no hace nada. No ejecuta mis pruebas en absoluto. ¿Alguna idea?
Gaurav
@Gaurav, te invité a una sala de chat para que podamos hablar de ello sin conexión.
DivDiff
15

Si creó su proyecto con Spring Initializr , todo debe estar configurado correctamente y todo lo que necesita hacer es ejecutar ...

./gradlew clean test --info
  • Suelta --infosi no quieres ver la salida de prueba.
  • Elimínelo cleansi no desea volver a ejecutar las pruebas que ya pasaron desde el último cambio.

Dependencias necesarias build.gradlepara realizar pruebas en Spring Boot ...

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Por alguna razón, el ejecutor de pruebas no le dice esto, pero genera un informe HTML en formato build/reports/tests/test/index.html.

Brent Bradburn
fuente
0

testCompile está en desuso. Compatible con Gradle 7:

dependencies {
...
   testImplementation 'junit:junit:4.13'
}

y si usa la estructura de carpetas predeterminada (src / test / java / ...) la sección de prueba es simplemente:

test {
    useJUnit()
}

Finalmente:

gradlew clean test

Ver también: https://docs.gradle.org/current/userguide/java_testing.html

rob2universe
fuente