Comment utiliser JUnit 5 avec Gradle?
Je suis en train d'utiliser JUnit 5 avec Gradle après j'ai réussi à l'exécution d'un test JUnit 4.
Résultat attendu: Lle JUnit 4 test a donné une belle "réussi" dans la sortie et d'un rapport html dans build/reports/tests
.
Résultat réel: JUnit 5 test ci-dessous n'a pas de sortie à autre chose qu'à (...) build succesful
, même si je sais que le test n'est pas fait exécuter, car il n'existe pas de test de la sortie du journal réussi/sauté/l'échec, et de mettre un fail
dans le test continue la construction réussie.
De course gradle test --info
rendements Skipping task ':testClasses' as it has no actions.
parmi beaucoup de je pense surtout que unrelevant de sortie.
Étonnamment, il dit aussi Executing task ':test'
et Generating HTML test report... Finished generating test html results
et similaire pour les données xml dans build/test-results/test
, tandis que le xml n'est pas généré, le html ne montre aucune exécution des tests et pas d'erreurs, et le test n'est en effet pas exécuter.
Ce que je pense aussi très intéressant, c'est que gradle test --debug
rendements
[TestEventLogger] Gradle Test Run :test STARTED
[org.gradle.api.internal.tasks.testing.junit.JUnitDetector] test-class-
scan : failed to scan parent class java/lang/Object, could not find the class file
[TestEventLogger]
[TestEventLogger] Gradle Test Run :test PASSED
alors que mon seul test contient
fail("test fails");
qui je pense est très étrange!
Mon fichier de build est
apply plugin: 'java'
test {
dependsOn 'cleanTest' //run tests every time
}
sourceSets {
main {
java {
srcDirs 'src'
}
}
test {
java {
srcDirs 'test'
}
}
}
repositories {
mavenCentral()
}
dependencies {
//when using this, it worked with a junit 4 test
// testCompile 'junit:junit:4.10'
//this should be needed for junit 5 (using M4 is required since IJ 2017.1.2
testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4")
}
test {
testLogging {
events "passed", "skipped", "failed"
}
}
Mon test est
package mypackage;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class HelloWorldTest {
@Test
public void testHelloWorld(){
assertEquals(2, 1+1, "message");
}
}
Ma structure de dossier, à l'aide de paquet mypackage
,
java-template-project
--- src
--- mypackage
--- HelloWorld.java
--- test
--- mypackage
--- HelloWorldTest.java
et dans IntelliJ 2017.1.3, dont je suis l'aide, la structure du module ressemble à ceci
java-template-project
--- java-template-project_main
--- src/mypackage
--- HelloWorld(.java)
--- java-template-project_test
--- test/mypackage
--- HelloWorldTest(.java)
parce que Gradle de nos jours veut la source et de tests dans leur propre paquet.
Ce que j'ai essayé
Évidemment, ce n'est pas la première question à ce sujet, toutes les questions que j'ai trouvé sont
-
Gradle projet en cours d'exécution jUnit 5 tests dans IntelliJ
Mais comme vous pouvez le voir c'est pour les anciennes versions de l'Ide, et je suis déjà à l'aide de la syntaxe pour les IJ 2016.3.3 et plus selon l'une des réponses, dans le dans le un JUnit dépendance ligne, donc ça devrait être ok.
-
La mise à niveau de JUnit 4 à JUnit 5 dans intellij avec gradle
Des liens de retour à la question ci-dessus, et des liens vers ce Jetbrains blog qui utilise la même ligne que la question ci-dessus. Également des liens vers:
-
Intégrer JUnit 5 les résultats des tests avec Intellij rapport de test
Celle-ci montre, dans la question, comme la dépendance aussitestRuntime("org.junit.vintage:junit-vintage-engine:5.0.0-M1")
qui est expliqué dans Pourquoi n'ont-JUnit Jupiter et JUnit Vintage séparés Quand j'ai l'Exécution de cas de test à l'Ide?
Eh bien, quand je l'ai exécuté, le résultat a montré qu'il ne pouvait pas trouver cette version, mais selon la Repository Maven c'est un JUnit 5:testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4")
Les réponses notez que vous pouvez simplement exécuter les tests au sein de l'Ide depuis les versions ultérieures ont JUnit 5 soutien. Je sais, et le test se passe bien quand je le lance à partir de l'intérieur de l'Ide. Mais je veux l'utiliser Gradle (et Travis, qui a besoin gestion de la dépendance).
-
Comment faire pour capturer la sortie standard stdout/stderr dans junit 5 gradle rapport de test?
J'ai essayé d'utiliser
testCompile("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M3") testCompile("org.junit.jupiter:junit-jupiter-engine:5.0.0-M3")
mais les résultats n'ont pas changé.
Mon modèle de projet est situé sur https://github.com/PHPirates/java-template-project mais cette question doit contenir toutes les informations nécessaires.
- Eu le même problème. Découvert que @Test doit être importé à partir de 'org.junit.jupiter.api' (Junit5 @Test) au lieu de
org.junit
(Junit4 @Test)
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de moteurs pour les deux JUnit versions, et vous avez besoin d'appliquer la JUnit plate-forme de plugin gradle. Je ne vois pas ça dans votre gradle fichier. Ici, c'est un travail gradle construire l'exécution de deux JUnit 4 et 5:
Voir le JUnit doc forme plus d'informations sur que.
Nouveau: JUnit 5 soutien dans Gradle 4.6
Comme l'a souligné dans cette GitHub problème de Gradle de 4,6 à partir de JUnit 5 est pris en charge!
Notes officielles de 4,6 (au moment de l'édition la plus récente, mais de vérifier la GitHub communiqués de page vous assurer que vous utilisez la dernière version) au docs.gradle.org. L'ancienne installation fonctionnera toujours, mais en utilisant cela rend le fichier build beaucoup plus propre.
[Modifier Mai 2019] Comme @deFreitas l'a souligné dans son réponse, JUnit documentation s'est améliorée, et maintenant, ils fournissent un exemple complet à https://github.com/junit-team/junit5-samples/tree/r5.4.0/junit5-jupiter-starter-gradle, voir en particulier les
construire.gradle
là. Heureusement, il s'avère être effectivement le même que celui de cette réponse.Mise À Jour De Gradle
Tout d'abord, assurez-vous que vous utilisez la dernière Gradle version, vérifier les derniers communiqués de dans leurs communiqués de GitHub. Si c'est pour l'exemple 4.6, exécutez dans un terminal dans votre projet de localisation
gradlew wrapper --gradle-version=4.6
ou assurez-vous de mettre à jour cette ligne dans votregradle/wrapper/gradle-wrapper.properties
fichier:distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
.La façon d'utiliser le haut-JUnit 5
Puis avec les fichiers java, la structure du répertoire etc. à partir de la question de la
build.gradle
fichier sera (à l'aide de la nouvelleplugins
bloc)PS Pour le strict minimum version, voir Ray répondre.
Android
Sur Android, j'ai réussi à exécuter la JUnit 5 test à partir de la question par adjonction, à mon application module fichier build. Comme vous pouvez le voir les dépendances sont les mêmes, mais je n'ai pas besoin de
useJUnitPlatform()
et le test de bloc de configuration est légèrement différente.cependant il ne fonctionne que pour moi, quand j'exécute le Gradle
test
tâche, pas quand je lance lecheck
tâche. Comme d'habitude, j'ai tester en créant un test en échec, puis-je essayer si le Gradle tâche de passe ou échoue.check
tâche par le simple ajout de deux dépendances à mon application Android. Va ajouter à la réponse.juste en ajoutant à la base de connaissances, je viens de recevoir la suite de travailler avec gradle 4.7:
plugins
bloc au lieu deapply plugin
est le avenir, mais pour le moment il n'est pas critique.En raison de github question la prise en charge intégrée pour JUnit 5, prévue pour Gradle 4.6
Ainsi, depuis gradle 4.6 votre résultat escompté être le même que le résultat réel.
UPD:
gradle 4.6-rc-1 a été publié le 16 février 2018 et cette version fournit la prise en charge intégrée pour junit 5.
Pour permettre junit 5 soutien dont vous avez besoin pour mettre à jour gradle wrapper:
et ajouter une ligne à construire.gradle:
Caisse junit la documentation officielle d'utilisation de junit 5 avec gradle.
construire.gradle
Peut-être quelque chose d'utile pour ceux qui ont été frappés par ce problème lors de la tentative d'intégrer JUnit5 avec gradle version 4.10.
En fait, avec 4.10 vous n'avez pas besoin d'ajouter ce test de configuration de bloc de construction.gradle pour permettre JUnit5.
Il devrait fonctionner correctement simplement en ajoutant les dépendances de jupitor-api et jupitor-moteur.
J'ai essayé d'explorer les notes de version de 4.10, mais ne pouvait pas trouver quelque chose au sujet de ce changement. Si quelqu'un en sait plus sur le "Pourquoi" derrière elle alors s'il vous plaît englighten moi aussi.
useJUnitPlatform()
sinon, mes tests ne fonctionnent pas (même sur Gradle 5.0), je suis curieux de savoir ce qui s'est passé ici. De toute façon, j'espère que ce sera utile pour d'autres personnes. (edit: peut-être que vous êtes à l'aide de Gradle pour un projet Android. Que peut faire la différence.)Could not find method test() for arguments [build_ejzeh5kmeasn8zq3a46rzrkon$_run_closure4@49e05c95] on root project 'xxxxx' of type org.gradle.api.Project.
, je pense qu'il arrive parce que j'ai mistest { useJUnitPlatform() }
à l'extérieur desubprojects { ... }
, si je la déplace à l'intérieur desubprojects { ... }
, cette erreur a disparu