Comment exécuter des tests JUnit avec Gradle?

98

Actuellement, j'ai le fichier build.gradle suivant :

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')
}    


Ce fichier build.gradle est pour mon référentiel ici . Tous mes fichiers principaux sont dans src / model / et leurs tests respectifs sont dans test / model .

Comment ajouter correctement une dépendance JUnit 4 puis exécuter ces tests dans les dossiers de tests / model ?

Wang-Zhao-Liu QM
la source

Réponses:

106

Comment ajouter correctement une dépendance junit 4?

En supposant que vous résolvez par rapport à un dépôt Maven standard (ou équivalent):

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

Exécutez ces tests dans les dossiers de tests / model?

Vous définissez votre ensemble de sources de test de la même manière:

sourceSets {
    ...

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

Appelez ensuite les tests comme suit:

./gradlew test

EDIT: Si vous utilisez JUnit 5 à la place, il y a plus d'étapes à suivre, vous devez suivre ce tutoriel .

Oliver Charlesworth
la source
8
srcDirs = ["test/model"]est un peu plus précis car il supprime le répertoire des sources de test par défaut, alors qu'il srcDir "test/model"ajoute un autre répertoire. Idem pour l' mainensemble source.
Peter Niederwieser
49

Si vous configurez votre projet avec la structure de package gradle par défaut, c'est-à-dire:

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

alors vous n'aurez pas besoin de modifier les sourcesSets pour exécuter vos tests. Gradle comprendra que vos classes et ressources de test sont dans src / test. Vous pouvez ensuite courir comme le dit Oliver ci-dessus. Une chose à noter: soyez prudent lorsque vous définissez des fichiers de propriétés et exécutez vos classes de test avec gradle et votre IDE. J'utilise Eclipse, et lors de l'exécution de JUnit à partir de celui-ci, Eclipse choisit un chemin de classe (le répertoire bin) tandis que gradle en choisit un autre (le répertoire de construction). Cela peut prêter à confusion si vous modifiez un fichier de ressources et que vous ne voyez pas votre modification reflétée lors de l'exécution du test.

DivDiff
la source
2
Pour diriger les fichiers de construction Eclipse vers le même répertoire que Gradle (peut éviter quelques erreurs frustrantes): Projet -> Propriétés -> Chemin de construction Java -> Dossier de sortie par défaut: remplacez "bin" par "build". Cependant ... d'après mon expérience, cela semble avoir l'habitude déconcertante de "retourner" à la "poubelle" par défaut de temps en temps de manière inattendue. Ce serait bien de savoir s'il existe un moyen pour qu'Eclipse utilise "build" par défaut.
mike rodent
2
@ mike-rodent pour autant que je sache, il est explicitement déconseillé de partager le même chemin de construction pour eclipse et gradle (voir par exemple discuter.gradle.org/t/… )
mtraut
OK, je suis corrigé! ... et je suppose qu'il n'y a rien à gagner à compiler dans le même répertoire. Dans la plupart des cas, la fonctionnalité du générateur d'éclipse devient un simple outil de validation: "oups, cela ne se compilera pas à cause de x, y et z".
mike rodent
1
@DivDiff La structure de mes dossiers src est configurée de la même manière que celle mentionnée ci-dessus, mais quand je fais un test de gradation, cela ne fait rien. Il n'exécute pas du tout mes tests. Une idée?
Gaurav
@Gaurav, je vous ai invité à un chat pour que nous puissions en parler hors ligne.
DivDiff
15

Si vous avez créé votre projet avec Spring Initializr , tout doit être configuré correctement et il ne vous reste plus qu'à exécuter ...

./gradlew clean test --info
  • Supprimez --infosi vous ne voulez pas voir la sortie du test.
  • Supprimez cleansi vous ne souhaitez pas relancer les tests qui ont déjà réussi depuis la dernière modification.

Dépendances requises build.gradlepour les tests dans Spring Boot ...

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

Pour une raison quelconque, le testeur ne vous le dit pas, mais il produit un rapport HTML au format build/reports/tests/test/index.html.

Brent Bradburn
la source
0

testCompile est obsolète. Compatible Gradle 7:

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

et si vous utilisez la structure de dossiers par défaut (src / test / java / ...), la section test est simplement:

test {
    useJUnit()
}

Finalement:

gradlew clean test

Voir également: https://docs.gradle.org/current/userguide/java_testing.html

rob2universe
la source