Scénarios de test JUnit @Before @BeforeClass Annotation

Table des matières:

Anonim

JUnit est le framework de test unitaire le plus populaire en Java. Il est explicitement recommandé pour les tests unitaires. JUnit ne nécessite pas de serveur pour tester l'application Web, ce qui accélère le processus de test.

Le framework JUnit permet également de générer rapidement et facilement des cas de test et des données de test. Le package org.Junit se compose de nombreuses interfaces et classes pour JUnit Testing telles que Test, Assert, After, Before, etc.

Qu'est-ce que le montage de test

Avant de comprendre ce qu'est un montage de test, étudions le code ci-dessous

Ce code est conçu pour exécuter deux cas de test sur un fichier simple.

public class OutputFileTest {sortie de fichier privé;sortie = nouveau fichier (…);output.delete ();public void testFile1 () {// Code pour vérifier le cas de test 1}output.delete ();sortie = nouveau fichier (…);public void testFile2 () {// Code pour vérifier le cas de test 2}output.delete ();}

Quelques problèmes ici

  • Le code n'est pas lisible
  • Le code n'est pas facile à maintenir.
  • Lorsque la suite de tests est complexe, le code peut contenir des problèmes logiques.

Comparez le même code en utilisant JUnit

classe publique OutputFileTest{sortie de fichier privé;@Before public void createOutputFile (){sortie = nouveau fichier (…);}@After public void deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// code pour l'objectif du cas de test}@Test public void testFile2 (){// code pour l'objectif du cas de test}}

Le code est beaucoup plus lisible et maintenable. La structure de code ci-dessus est un appareil de test.

Un appareil de test est un contexte dans lequel un scénario de test s'exécute. En règle générale, les montages de test comprennent:

  • Objets ou ressources disponibles pour n'importe quel scénario de test.
  • Activités requises qui rendent ces objets / ressources disponibles.
  • Ces activités sont
    1. allocation ( configuration )
    2. désaffectation ( démontage ).

Configuration et démontage

  • En général, certaines tâches répétées doivent être effectuées avant chaque scénario de test. Exemple: créer une connexion à la base de données.
  • De même, à la fin de chaque cas de test, il peut y avoir des tâches répétées. Exemple: pour nettoyer une fois l'exécution du test terminée.
  • JUnit fournit des annotations qui aident à la configuration et au démontage. Il garantit que les ressources sont libérées et que le système de test est prêt pour le prochain cas de test.

Ces annotations sont discutées ci-dessous.

Installer

L' annotation @Before est utilisée sur une méthode contenant du code Java à exécuter avant chaque cas de test. c'est-à-dire qu'il s'exécute avant chaque exécution de test.

Démontage (quel que soit le verdict)

L' annotation @After est utilisée sur une méthode contenant du code java à exécuter après chaque cas de test. Ces méthodes s'exécuteront même si des exceptions sont levées dans le cas de test ou en cas d'échec d'assertion.

Noter:

  • Il est permis d'avoir n'importe quel nombre d'annotations répertoriées ci-dessus.
  • Toutes les méthodes annotées avec @Before s'exécuteront avant chaque cas de test, mais elles peuvent s'exécuter dans n'importe quel ordre.
  • Vous pouvez hériter des méthodes @Before et @After d'une super classe, l'exécution est la suivante: C'est un processus d'exécution standard dans JUnit.
  1. Exécutez les méthodes @Before dans la superclasse
  2. Exécutez les méthodes @Before de cette classe
  3. Exécuter une méthode @Test dans cette classe
  4. Exécutez les méthodes @After dans cette classe
  5. Exécutez les méthodes @After dans la superclasse

Exemple: création d'une classe avec un fichier comme appareil de test

classe publique OutputFileTest{sortie de fichier privé;@Before public void createOutputFile (){sortie = nouveau fichier (…);}@After public void deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// code pour l'objectif du cas de test}@Test public void testFile2 (){// code pour l'objectif du cas de test}}

Dans l'exemple ci-dessus, la chaîne d'exécution sera la suivante:

  1. createOutputFile ()
  2. testFile1 ()
  3. deleteOutputFile ()
  4. createOutputFile ()
  5. testFile2 ()
  6. deleteOutputFile ()

Hypothèse: testFile1 () s'exécute avant testFile2 () - ce qui n'est pas garanti.

Configuration unique

  • Il est possible d'exécuter une méthode une seule fois pour toute la classe de test avant l'exécution de l'un des tests et avant toute méthode @Before .
  • "Une seule configuration" est utile pour démarrer les serveurs, ouvrir les communications, etc. La fermeture et la réouverture des ressources pour chaque test prennent du temps.
  • Cela peut être fait en utilisant l' annotation @BeforeClass
@BeforeClass public static void Method_Name () {// code de configuration de la classe ici}

Démolition une seule fois

  • Semblable à une configuration unique, une méthode de nettoyage unique est également disponible. Il s'exécute une fois que toutes les méthodes de cas de test et les annotations @After ont été exécutées.
  • Il est utile pour arrêter les serveurs, fermer les liens de communication, etc.
  • Cela peut être fait à l'aide de l' annotation @AfterClass
@AfterClass public static void Method_Name (){// code de nettoyage de classe ici}

Suites de test JUnit

Si nous voulons exécuter plusieurs tests dans un ordre spécifié, cela peut être fait en combinant tous les tests en un seul endroit. Cet endroit s'appelle les suites de tests. Plus de détails sur la façon d'exécuter des suites de tests et sur son utilisation dans JUnit seront abordés dans ce didacticiel.

Runner de test Junit

JUnit fournit un outil pour l'exécution de vos cas de test.

  • La classe JUnitCore est utilisée pour exécuter ces tests.
  • Une méthode appelée runClasses fournie par org.junit.runner.JUnitCore, est utilisée pour exécuter une ou plusieurs classes de test.
  • Le type de retour de cette méthode est l' objet Result ( org.junit.runner.Result ), qui est utilisé pour accéder aux informations sur les tests. Voir l'exemple de code suivant pour plus de clarté.
Test de classe publique {public static void main (String [] args) {Résultat résultat = JUnitCore.runClasses (CreateAndSetName.class);for (Échec d'échec: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println (result.wasSuccessful ());}}

Dans le code ci-dessus, l'objet "résultat" est traité pour obtenir les échecs et les résultats positifs des cas de test que nous exécutons.

Premier programme JUnit

Une bonne connaissance du SDLC, de la programmation Java et des bases du processus de test logiciel aide à comprendre le programme JUnit.

Comprenons les tests unitaires à l'aide d'un exemple en direct. Nous devons créer une classe de test avec une méthode de test annotée avec @Test comme indiqué ci-dessous:

MyFirstClassTest.java

package guru99.JUnit;import statique org.JUnit.Assert. *;import org.JUnit.Test;classe publique MyFirstClassTest {@Testpublic void myFirstMethod () {String str = "JUnit fonctionne correctement";assertEquals ("JUnit fonctionne correctement", str);}}

TestRunner.java

Pour exécuter notre méthode de test (ci-dessus), nous devons créer un exécuteur de test. Dans le testeur, nous devons ajouter une classe de test en tant que paramètre dans la méthode runclasses () de JUnitCore. Il renverra le résultat du test, selon que le test est réussi ou échoué.

Pour plus de détails à ce sujet, consultez le code ci-dessous:

package guru99.JUnit;import org.JUnit.runner.JUnitCore;import org.JUnit.runner.Result;import org.JUnit.runner.notification.Failure;public class TestRunner {public static void main (String [] args) {Résultat résultat = JUnitCore.runClasses (MyFirstClassTest.class);for (Échec d'échec: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Result ==" + result.wasSuccessful ());}}

Production

Une fois que TestRunner.java exécute nos méthodes de test, nous obtenons la sortie comme échouée ou réussie. Veuillez trouver ci-dessous l'explication de la sortie:

  1. Dans cet exemple, après avoir exécuté MyFirstClassTest.java , le test est réussi et le résultat est en vert.
  2. S'il avait échoué, il aurait dû afficher le résultat en rouge et une défaillance peut être observée dans le suivi des défaillances. Voir ci-dessous JUnit gui:

Résumé :

  • JUnit est un framework qui prend en charge plusieurs annotations pour identifier une méthode contenant un test.
  • JUnit fournit une annotation appelée @Test, qui indique à JUnit que la méthode publique void dans laquelle elle est utilisée peut s'exécuter en tant que scénario de test.
  • Un montage de test est un contexte dans lequel un scénario de test s'exécute
  • Pour exécuter plusieurs tests dans un ordre spécifié, cela peut être fait en combinant tous les tests en un seul endroit. Cet endroit s'appelle les suites de tests.
  • JUnit fournit un outil pour l'exécution des tests où nous pouvons exécuter nos cas de test appelés Test Runner.