Créer JUnit Suite de tests avec exemple : @RunWith @SuiteClasses
⚡ Résumé intelligent
JUnit Les suites de tests regroupent les cas de test de plusieurs classes afin qu'ils s'exécutent ensemble en une seule passe, pilotées par les annotations @RunWith(Suite.class) et @SuiteClasses et lancées via une classe d'exécution de tests ordinaire.

In JUnit, une suite de tests nous permet de regrouper tous cas de test regrouper plusieurs classes en un seul endroit et les exécuter simultanément.
Pour exécuter la suite de tests, vous devez annoter une classe à l'aide des annotations mentionnées ci-dessous :
- @RunWith(Suite.class)
- @SuiteClasses(test1.class, test2.class…) ou @Suite.SuiteClasses({test1.class, test2.class…})
Grâce aux annotations ci-dessus, toutes les classes de test de la suite s'exécuteront une à une. La classe de la suite reste vide : elle sert uniquement à stocker les annotations, et le programme d'exécution les lit pour déterminer les tests à exécuter.
Étapes pour créer une suite de tests et un exécuteur de tests
Les quatre étapes ci-dessous permettent de construire la plus petite suite de tests exécutable : deux classes de tests ordinaires, une classe de suite qui les nomme et un exécuteur qui lance la suite à partir d’une méthode principale.
Étape 1) Créez une classe de test simple (par exemple MyFirstClassTest) et ajoutez une méthode annotée avec @Tester.
La première classe contient une seule méthode de test vide, ce qui suffit à prouver que la suite de tests la détecte :
Étape 2) Créez une autre classe de test à ajouter (par exemple MySecondClassTest) et créez une méthode annotée avec @Test.
La deuxième classe suit exactement la même forme, la suite comporte donc deux classes distinctes à agréger :
Étape 3) Pour créer une suite de tests, vous devez d'abord annoter la classe avec @RunWith(Suite.class) et @SuiteClasses(class1.class, class2.class…).
Notez que la classe de suite TestSuiteExample ne déclare aucune méthode de test propre ; les deux annotations contiennent toutes les informations :
Étape 4) Créez une classe Test Runner pour exécuter notre suite de tests comme indiqué ci-dessous :
Le coureur est un simple Java classe avec une méthode principale qui transmet la classe suite à JUnitCore:
Code Explication:
- Code Ligne 8: Déclaration de la méthode principale de la classe Test qui exécutera notre JUnit test.
- Code Ligne 9: Exécution des cas de test à l'aide de JUnitCore.runClasses qui prend le nom de la classe de test comme paramètre (dans l'exemple ci-dessus, vous utilisez TestSuiteExample.class présenté à l'étape 3).
- Code Ligne 11: Traitement du résultat à l'aide d'une boucle for et affichage du résultat d'échec.
- Code Ligne 13: Impression du résultat réussi.
Sortie : Voici le résultat qui montre un test réussi sans aucun échec. trace comme indiqué ci-dessous :
La barre verte confirme la fonction d'une suite : un seul lancement, une seule vue des résultats, et les deux classes sont regroupées sous le nœud de la suite plutôt que dans deux exécutions distinctes.
JUnit Exemple de suite de tests
Prenons un exemple plus complexe, dans lequel les classes à l'intérieur de la suite sont en réalité… affirmer quelque chose au lieu de maintenir une méthode vide.
JunitTest.java
JunitTest.java est une classe simple annotée avec @Courir avec et @Suite annotations. Vous pouvez indiquer autant de classes de la suite que vous le souhaitez en tant que paramètres, comme indiqué ci-dessous :
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty, it is used only as a holder for the above annotations }
SuiteTest1.java
SuiteTest1.java est une classe de test possédant des méthodes de test qui affichent un message, comme indiqué ci-dessous. Vous utiliserez cette classe comme membre de la suite dans la classe mentionnée ci-dessus. Elle s'appuie sur une classe auxiliaire nommée JUnitMessage, qui est défini ailleurs dans le même paquet et n'est pas reproduit ici.
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SuiteTest1 { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage() { System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage() { message = "Hi!" + message; System.out.println("Junit Hi Message is printing "); assertEquals(message, junitMessage.printHiMessage()); System.out.println("Suite Test 2 is successful " + message); } }
SuiteTest2.java
SuiteTest2.java est une autre classe de test, similaire à SuiteTest1.java, possédant une méthode de test pour afficher un message comme indiqué ci-dessous. Vous utiliserez cette classe comme membre de la suite dans JunitTest.java.
package guru99.junit; import org.junit.Assert; import org.junit.Test; public class SuiteTest2 { @Test public void createAndSetName() { String expected = "Y"; String actual = "Y"; Assert.assertEquals(expected, actual); System.out.println("Suite Test 1 is successful " + actual); } }
Sortie
Après avoir exécuté Test Junit.java, qui contient une suite contenant SuiteTest1.java et SuiteTest2.javaVous obtiendrez le résultat ci-dessous. La console affiche les messages produits par les deux classes :
Le JUnit Afficher les enregistrements de la même exécution que trois méthodes de test réussies regroupées sous la classe de suite :
À noter: Dans cet exemple, les étiquettes de la console sont inversées : la chaîne affichée par SuiteTest1 est « Suite Test 2 » et celle affichée par SuiteTest2 est « Suite Test 1 ». Les listes originales sont reproduites sans modification, les étiquettes restent donc telles que l’auteur les a écrites ; lisez le nom de la classe dans le JUnit Consultez l'image plutôt que l'étiquette imprimée lorsque vous faites correspondre la sortie à la source.
Comment créer une suite de tests dans JUnit 5
JUnit La version 5 supprime complètement les runners, donc @RunWith(Suite.class) n'existe pas dans les packages org.junit.jupiter. Les suites ont été déplacées vers JUnit Plateforme, qui les expédie dans un artefact séparé appelé moteur de suite de plateforme JUnitAjoutez cette dépendance, puis annotez une classe avec @Suite et l'une des annotations de sélecteur.
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName("Guru99 suite") @SelectClasses({ SuiteTest1.class, SuiteTest2.class }) public class JunitTest { // Empty holder, exactly as in JUnit 4 }
Les annotations de sélecteur remplacent la liste unique @SuiteClasses par une petite famille d'options :
| Annotation | Ce qu'il sélectionne |
| @SelectClasses | Classes de test individuelles nommées une par une, remplaçant directement @SuiteClasses. |
| @SelectPackages | Chaque classe de test du package nommé et de tous ses sous-packages. |
| @IncludeClassNamePatterns | Un filtre d'expression régulière appliqué à la sélection. |
| @SuiteDisplayName | Un nom lisible affiché dans le rapport à la place du nom de la classe. |
Deux autres différences ont leur importance en pratique. A JUnit 5. La classe de suite peut déclarer des méthodes @BeforeSuite et @AfterSuite, qui s'exécutent une seule fois pour l'ensemble de la suite, et la JUnit L'exemple 4 ci-dessus s'exécute toujours sur le JUnit La plateforme utilise le moteur d'origine, il n'est donc pas nécessaire de réécrire le code original de cette page pour qu'il continue de fonctionner.
Avantages et limites de JUnit Suites de test
Une suite est un groupeping mécanisme, pas un cadre de test de sa propre nature, et cela détermine à la fois ses points forts et ses limites.
Avantages
- Un lancement permet de gérer des classes similaires ensemble, donc un ensemble de fumée ou un régression Le processus se lance avec une seule commande.
- L'affichage des résultats regroupe chaque classe sous un seul nœud de suite, ce qui facilite le repérage d'une défaillance partagée.
- La liste des membres est codée dans le code, elle est donc vérifiée et versionnée comme n'importe quel autre fichier source.
- La même classe de suite peut être lancée depuis un IDE, depuis un exécuteur tel que JUnitNoyau, ou à partir d'un outil de construction.
Limites
- @SuiteClasses est une liste codée en dur, donc une nouvelle classe de test est silencieusement omise jusqu'à ce que quelqu'un modifie la suite.
- La suite ne donne aucune garantie d'ordre au-delà de l'ordre dans lequel les classes sont listées.
- Rien n'est partagé entre les classes membres ; une suite ne remplace donc pas une fixture ou une classe de base.
- Les outils de construction détectent déjà les classes de test grâce aux conventions d'appellation, ce qui rend une suite de tests redondante sur de nombreux projets.
Erreurs courantes lors de la création d'un JUnit Suite de tests
La plupart des problèmes de suite logicielle génèrent un message court et peu informatif. Le tableau ci-dessous répertorie les messages les plus courants, leurs causes et leurs solutions.
| Message ou symptôme | Causes | Fixer |
| Erreur d'initialisation : aucune méthode exécutable | La classe est exécutée comme une classe de test ordinaire, mais elle ne contient que des annotations. | Ajoutez @RunWith(Suite.class) pour que le lanceur de la suite prenne le relais au lieu du lanceur par défaut. |
| Symbole introuvable : classe Suite | L'importation de la suite est manquante. | Importez org.junit.runners.Suite en plus de org.junit.runner.RunWith. |
| La suite se déroule sans problème, mais un cours est manqué. | La classe n'a jamais été ajoutée à la liste @SuiteClasses. | Ajoutez la classe explicitement ou déplacez-la vers @SelectPackages dans JUnit 5. |
| Le nom de classe n'est pas accepté par le compilateur. | L'annotation @Runwith ou @suiteClasses a été saisie avec une casse incorrecte. | Java Les annotations sont sensibles à la casse : écrivez @RunWith et @SuiteClasses exactement. |
| Les tests de la classe de suite elle-même ne sont jamais exécutés. | Une méthode @Test a été ajoutée au conteneur de la suite. | Laissez le conteneur vide et déplacez la méthode de test dans une classe membre. |
Écrire la suite une fois et garderping La précision est le véritable travail. Si la liste s'éloigne des classes sur le disque, la suite signale un problème au vert tandis qu'une partie de la Test de l'unité La commande set ne s'exécute jamais, l'un des modes de défaillance les plus silencieux. test logiciel.







