JUnit - Guide rapide

Le test est le processus de vérification de la fonctionnalité d'une application pour s'assurer qu'elle s'exécute conformément aux exigences. Les tests unitaires interviennent au niveau des développeurs; c'est le test d'une seule entité (classe ou méthode). Les tests unitaires jouent un rôle essentiel pour aider une entreprise de logiciels à fournir des produits de qualité à ses clients.

Les tests unitaires peuvent être effectués de deux manières: les tests manuels et les tests automatisés.

Test manuel Test automatisé
L'exécution manuelle d'un cas de test sans aucune prise en charge d'outil est appelée test manuel. Prendre en charge les outils et exécuter les cas de test à l'aide d'un outil d'automatisation est appelé test d'automatisation.
Time-consuming and tedious - Les cas de test étant exécutés par des ressources humaines, c'est très lent et fastidieux. Fast - L'automatisation exécute les cas de test beaucoup plus rapidement que les ressources humaines.
Huge investment in human resources - Les cas de test devant être exécutés manuellement, plus de testeurs sont nécessaires pour les tests manuels. Less investment in human resources - Les cas de test sont exécutés à l'aide d'outils d'automatisation, de sorte que moins de testeurs sont nécessaires dans les tests d'automatisation.
Less reliable - Les tests manuels sont moins fiables, car ils doivent tenir compte des erreurs humaines. More reliable - Les tests d'automatisation sont précis et fiables.
Non-programmable - Aucune programmation ne peut être effectuée pour écrire des tests sophistiqués pour récupérer des informations cachées. Programmable - Les testeurs peuvent programmer des tests sophistiqués pour faire ressortir des informations cachées.

Qu'est-ce que JUnit?

JUnit est un framework de test unitaire pour le langage de programmation Java. Il joue un rôle crucial dans le développement piloté par les tests et est une famille de frameworks de tests unitaires collectivement connus sous le nom de xUnit.

JUnit promeut l'idée de "tester d'abord puis coder", qui met l'accent sur la configuration des données de test pour un morceau de code qui peut être testé en premier, puis implémenté. Cette approche est comme "tester un peu, coder un peu, tester un peu, coder un peu". Cela augmente la productivité du programmeur et la stabilité du code du programme, ce qui réduit le stress du programmeur et le temps consacré au débogage.

Caractéristiques de JUnit

  • JUnit est un framework open source, utilisé pour écrire et exécuter des tests.

  • Fournit des annotations pour identifier les méthodes de test.

  • Fournit des affirmations pour tester les résultats attendus.

  • Fournit des exécuteurs de test pour exécuter des tests.

  • Les tests JUnit vous permettent d'écrire des codes plus rapidement, ce qui augmente la qualité.

  • JUnit est d'une simplicité élégante. C'est moins complexe et prend moins de temps.

  • Les tests JUnit peuvent être exécutés automatiquement et ils vérifient leurs propres résultats et fournissent une rétroaction immédiate. Il n'est pas nécessaire de parcourir manuellement un rapport des résultats de test.

  • Les tests JUnit peuvent être organisés en suites de tests contenant des cas de test et même d'autres suites de tests.

  • JUnit affiche la progression du test dans une barre qui est verte si le test se déroule correctement, et elle devient rouge lorsqu'un test échoue.

Qu'est-ce qu'un scénario de test unitaire?

Un cas de test unitaire est une partie du code, ce qui garantit qu'une autre partie du code (méthode) fonctionne comme prévu. Pour obtenir rapidement les résultats souhaités, un cadre de test est nécessaire. JUnit est un cadre de test unitaire parfait pour le langage de programmation Java.

Un cas de test unitaire écrit formel est caractérisé par une entrée connue et une sortie attendue, qui sont élaborées avant l'exécution du test. L'entrée connue doit tester une condition préalable et la sortie attendue doit tester une post-condition.

Il doit y avoir au moins deux cas de test unitaires pour chaque exigence - un test positif et un test négatif. Si une exigence a des sous-exigences, chaque sous-exigence doit avoir au moins deux cas de test positifs et négatifs.

Configuration de l'environnement local

JUnit est un framework pour Java, donc la toute première exigence est d'avoir JDK installé sur votre machine.

Exigence du système

JDK 1.5 ou supérieur.
Mémoire Aucune exigence minimale.
Espace disque Aucune exigence minimale.
Système opérateur Aucune exigence minimale.

Étape 1: Vérifiez l'installation de Java sur votre machine

Tout d'abord, ouvrez la console et exécutez une commande java basée sur le système d'exploitation sur lequel vous travaillez.

OS Tâche Commander
les fenêtres Ouvrez la console de commande c: \> java -version
Linux Ouvrir le terminal de commande $ java -version
Mac Terminal ouvert machine: ~ joseph $ java -version

Vérifions la sortie pour tous les systèmes d'exploitation -

OS Production
les fenêtres

version java "1.8.0_101"

Environnement d'exécution Java (TM) SE (build 1.8.0_101)

Linux

version java "1.8.0_101"

Environnement d'exécution Java (TM) SE (build 1.8.0_101)

Mac

version java "1.8.0_101"

Environnement d'exécution Java (TM) SE (build 1.8.0_101)

Si Java n'est pas installé sur votre système, téléchargez le kit de développement logiciel Java (SDK) à partir du lien suivant https://www.oracle.com. Nous supposons que Java 1.8.0_101 est la version installée pour ce didacticiel.

Étape 2: définir l'environnement JAVA

Met le JAVA_HOMEvariable d'environnement pour pointer vers l'emplacement du répertoire de base où Java est installé sur votre machine. Par exemple.

OS Production
les fenêtres Définissez la variable d'environnement JAVA_HOME sur C: \ Program Files \ Java \ jdk1.8.0_101
Linux export JAVA_HOME = / usr / local / java-current
Mac export JAVA_HOME = / Bibliothèque / Java / Accueil

Ajoutez l'emplacement du compilateur Java au chemin système.

OS Production
les fenêtres Ajouter la chaîne C:\Program Files\Java\jdk1.8.0_101\bin à la fin de la variable système, Path.
Linux export PATH = $PATH:$JAVA_HOME / bin /
Mac non requis

Vérifiez l'installation de Java à l'aide de la commande java -version comme expliqué ci-dessus.

Étape 3: Téléchargez l'archive JUnit

Téléchargez la dernière version du fichier jar JUnit à partir de http://www.junit.org. Au moment de la rédaction de ce didacticiel, nous avons téléchargé Junit-4.12.jar et l'avons copié dans le dossier C: \> JUnit.

OS Nom de l'archive
les fenêtres junit4.12.jar
Linux junit4.12.jar
Mac junit4.12.jar

Étape 4: définir l'environnement JUnit

Met le JUNIT_HOMEvariable d'environnement pour pointer vers l'emplacement du répertoire de base où JUNIT jar est stocké sur votre machine. Supposons que nous ayons stocké junit4.12.jar dans le dossier JUNIT.

Sr.Non OS et description
1

Windows

Définissez la variable d'environnement JUNIT_HOME sur C: \ JUNIT

2

Linux

export JUNIT_HOME = / usr / local / JUNIT

3

Mac

export JUNIT_HOME = / Bibliothèque / JUNIT

Étape 5: Définissez la variable CLASSPATH

Met le CLASSPATH variable d'environnement pour pointer vers l'emplacement du fichier JUNIT.

Sr.Non OS et description
1

Windows

Définissez la variable d'environnement CLASSPATH sur% CLASSPATH%;% JUNIT_HOME% \ junit4.12.jar;.;

2

Linux

export CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar :.

3

Mac

export CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar :.

Étape 6: Tester la configuration de JUnit

Créer un nom de fichier de classe Java TestJunit dans C:\>JUNIT_WORKSPACE

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
   @Test
	
   public void testAdd() {
      String str = "Junit is working fine";
      assertEquals("Junit is working fine",str);
   }
}

Créer un nom de fichier de classe Java TestRunner dans C:\>JUNIT_WORKSPACE pour exécuter des cas de test.

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Étape 7: Vérifiez le résultat

Compilez les classes en utilisant javac compilateur comme suit -

C:\JUNIT_WORKSPACE>javac TestJunit.java TestRunner.java

Maintenant, exécutez le Test Runner pour voir le résultat comme suit -

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

true

JUnit est un Regression Testing Frameworkutilisé par les développeurs pour implémenter des tests unitaires en Java, accélérer la vitesse de programmation et augmenter la qualité du code. JUnit Framework peut être facilement intégré avec l'un des éléments suivants:

  • Eclipse
  • Ant
  • Maven

Fonctionnalités de JUnit Test Framework

Le framework de test JUnit fournit les fonctionnalités importantes suivantes -

  • Fixtures
  • Suites de tests
  • Coureurs d'essai
  • Classes JUnit

Agencements

Fixturesest un état fixe d'un ensemble d'objets utilisé comme base de référence pour l'exécution de tests. Le but d'un montage de test est de s'assurer qu'il existe un environnement bien connu et fixe dans lequel les tests sont exécutés afin que les résultats soient reproductibles. Il comprend -

  • setUp (), qui s'exécute avant chaque appel de test.
  • tearDown (), qui s'exécute après chaque méthode de test.

Vérifions un exemple -

import junit.framework.*;

public class JavaTest extends TestCase {
   protected int value1, value2;
   
   // assigning the values
   protected void setUp(){
      value1 = 3;
      value2 = 3;
   }

   // test method to add two values
   public void testAdd(){
      double result = value1 + value2;
      assertTrue(result == 6);
   }
}

Suites de test

Une suite de tests regroupe quelques cas de test unitaires et les exécute ensemble. Dans JUnit, les annotations @RunWith et @Suite sont utilisées pour exécuter le test de la suite. Vous trouverez ci-dessous un exemple qui utilise les classes de test TestJunit1 et TestJunit2.

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

//JUnit Suite Test
@RunWith(Suite.class)

@Suite.SuiteClasses({ 
   TestJunit1.class ,TestJunit2.class
})

public class JunitTestSuite {
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit1 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");    
      assertEquals(message, messageUtil.printMessage());     
   }
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit2 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
 
   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Test Runners

Test Runner est utilisé pour exécuter les cas de test. Voici un exemple qui suppose la classe de testTestJunit existe déjà.

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Classes JUnit

Les classes JUnit sont des classes importantes, utilisées pour écrire et tester des JUnits. Certaines des classes importantes sont -

  • Assert - Contient un ensemble de méthodes d'assert.

  • TestCase - Contient un cas de test qui définit l'appareil pour exécuter plusieurs tests.

  • TestResult - Contient des méthodes pour collecter les résultats de l'exécution d'un scénario de test.

Prenons maintenant un exemple de base pour illustrer le processus étape par étape d'utilisation de JUnit.

Créer une classe

Créez une classe Java à tester, disons MessageUtil.java dans C:\>JUNIT_WORKSPACE

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
	
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
}

Créer une classe de cas de test

  • Créez une classe de test java, par exemple TestJunit.java.
  • Ajoutez une méthode de test testPrintMessage () à votre classe de test.
  • Ajoutez un Annotaion @Test à la méthode testPrintMessage ().
  • Implémentez la condition de test et vérifiez la condition à l'aide de l'API assertEquals de JUnit.

Créez un nom de fichier de classe Java TestJunit.java dans C:\>JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      assertEquals(message,messageUtil.printMessage());
   }
}

Créer une classe Test Runner

  • Créez une classe java TestRunner.
  • Utilisez la méthode runClasses de la classe JUnitCore de JUnit pour exécuter le scénario de test de la classe de test créée ci-dessus.
  • Obtenez le résultat des cas de test exécutés dans l'objet du résultat.
  • Obtenez les échecs en utilisant la méthode getFailures () de l'objet Result.
  • Obtenez le résultat Success en utilisant la méthode wasSuccessful () de l'objet Result.

Créez un fichier de classe Java nommé TestRunner.java dans C:\>JUNIT_WORKSPACE pour exécuter des cas de test.

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez les classes MessageUtil, Test case et Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

Hello World
true

Maintenant, mettez à jour TestJunit dans C:\>JUNIT_WORKSPACEde sorte que le test échoue. Modifiez la chaîne du message.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      message = "New Word";
      assertEquals(message,messageUtil.printMessage());
   }
}

Gardons le reste des classes tel quel et essayons d'exécuter le même Test Runner.

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

Hello World
testPrintMessage(TestJunit): expected:<[New Wor]d> but was:<[Hello Worl]d>
false

Le package le plus important de JUnit est junit.framework, qui contient toutes les classes principales. Certaines des classes importantes sont les suivantes -

Sr.No. Nom du cours Fonctionnalité
1 Affirmer Un ensemble de méthodes d'assert.
2 Cas de test Un cas de test définit l'appareil pour exécuter plusieurs tests.
3 Résultat du test Un TestResult collecte les résultats de l'exécution d'un scénario de test.
4 Suite de tests Un TestSuite est un composite de tests.

Assert Class

Voici la déclaration pour org.junit.Assert classe -

public class Assert extends java.lang.Object

Cette classe fournit un ensemble de méthodes d'assertion utiles pour écrire des tests. Seules les affirmations ayant échoué sont enregistrées. Certaines des méthodes importantes de la classe Assert sont les suivantes:

Sr.No. Méthodes et description
1

void assertEquals(boolean expected, boolean actual)

Vérifie que deux primitives / objets sont égaux.

2

void assertFalse(boolean condition)

Vérifie qu'une condition est fausse.

3

void assertNotNull(Object object)

Vérifie qu'un objet n'est pas nul.

4

void assertNull(Object object)

Vérifie qu'un objet est nul.

5

void assertTrue(boolean condition)

Vérifie qu'une condition est vraie.

6

void fail()

Échoue un test sans message.

Utilisons certaines des méthodes mentionnées ci-dessus dans un exemple. Créez un fichier de classe Java nommé TestJunit1.java dansC:\>JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.*;

public class TestJunit1 {
   @Test
   public void testAdd() {
      //test data
      int num = 5;
      String temp = null;
      String str = "Junit is working fine";

      //check for equality
      assertEquals("Junit is working fine", str);
      
      //check for false condition
      assertFalse(num > 6);

      //check for not null value
      assertNotNull(temp);
   }
}

Ensuite, créez un fichier de classe Java nommé TestRunner1.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner1 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit1.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez le scénario de test et les classes Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac TestJunit1.java TestRunner1.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner1

Vérifiez la sortie.

true

Classe TestCase

Voici la déclaration pour org.junit.TestCase classe -

public abstract class TestCase extends Assert implements Test

Un cas de test définit l'appareil pour exécuter plusieurs tests. Certaines des méthodes importantes deTestCase les classes sont les suivantes -

Sr.No. Méthodes et description
1

int countTestCases()

Compte le nombre de cas de test exécutés par run (résultat TestResult).

2

TestResult createResult()

Crée un objet TestResult par défaut.

3

String getName()

Obtient le nom d'un TestCase.

4

TestResult run()

Une méthode pratique pour exécuter ce test, en collectant les résultats avec un objet TestResult par défaut.

5

void run(TestResult result)

Exécute le scénario de test et collecte les résultats dans TestResult.

6

void setName(String name)

Définit le nom d'un TestCase.

sept

void setUp()

Configurez l'appareil, par exemple, ouvrez une connexion réseau.

8

void tearDown()

Démarre l'appareil, par exemple, ferme une connexion réseau.

9

String toString()

Renvoie une représentation sous forme de chaîne du scénario de test.

Utilisons certaines des méthodes mentionnées ci-dessus dans un exemple. Créez un fichier de classe Java nomméTestJunit2.java dans C: \> JUNIT_WORKSPACE.

import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;

public class TestJunit2 extends TestCase  {
   protected double fValue1;
   protected double fValue2;
   
   @Before 
   public void setUp() {
      fValue1 = 2.0;
      fValue2 = 3.0;
   }
	
   @Test
   public void testAdd() {
      //count the number of test cases
      System.out.println("No of Test Case = "+ this.countTestCases());
		
      //test getName 
      String name = this.getName();
      System.out.println("Test Case Name = "+ name);

      //test setName
      this.setName("testNewAdd");
      String newName = this.getName();
      System.out.println("Updated Test Case Name = "+ newName);
   }
	
   //tearDown used to close the connection or clean up activities
   public void tearDown(  ) {
   }
}

Ensuite, créez un fichier de classe Java nommé TestRunner2.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner2 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit2.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez le scénario de test et les classes Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac TestJunit2.java TestRunner2.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner2

Vérifiez la sortie.

No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
true

Classe TestResult

Voici la déclaration pour org.junit.TestResult classe -

public class TestResult extends Object

Un TestResult collecte les résultats de l'exécution d'un scénario de test. Il s'agit d'une instance du modèle Collecting Parameter. Le cadre de test fait la distinction entre les échecs et les erreurs. Un échec est anticipé et vérifié avec des affirmations. Les erreurs sont des problèmes imprévus comme une ArrayIndexOutOfBoundsException. Certaines des méthodes importantes deTestResult les classes sont les suivantes -

Sr.No. Méthodes et description
1

void addError(Test test, Throwable t)

Ajoute une erreur à la liste des erreurs.

2

void addFailure(Test test, AssertionFailedError t)

Ajoute un échec à la liste des échecs.

3

void endTest(Test test)

Informe le résultat qu'un test a été terminé.

4

int errorCount()

Obtient le nombre d'erreurs détectées.

5

Enumeration<TestFailure> errors()

Renvoie une énumération pour les erreurs.

6

int failureCount()

Obtient le nombre d'échecs détectés.

sept

void run(TestCase test)

Exécute un TestCase.

8

int runCount()

Obtient le nombre de tests exécutés.

9

void startTest(Test test)

Informe le résultat qu'un test sera lancé.

dix

void stop()

Marque que le test doit s'arrêter.

Créez un fichier de classe Java nommé TestJunit3.java dans C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import junit.framework.AssertionFailedError;
import junit.framework.TestResult;

public class TestJunit3 extends TestResult {
   // add the error
   public synchronized void addError(Test test, Throwable t) {
      super.addError((junit.framework.Test) test, t);
   }

   // add the failure
   public synchronized void addFailure(Test test, AssertionFailedError t) {
      super.addFailure((junit.framework.Test) test, t);
   }
	
   @Test
   public void testAdd() {
      // add any test
   }
   
   // Marks that the test run should stop.
   public synchronized void stop() {
      //stop the test here
   }
}

Ensuite, créez un fichier de classe Java nommé TestRunner3.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner3 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit3.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez le scénario de test et les classes Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac TestJunit3.java TestRunner3.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner3

Vérifiez la sortie.

true

Classe TestSuite

Voici la déclaration pour org.junit.TestSuite classe:

public class TestSuite extends Object implements Test

Un TestSuite est un Composite de tests. Il exécute une collection de cas de test. Certaines des méthodes importantes deTestSuite les classes sont les suivantes -

Sr.No. Méthodes et description
1

void addTest(Test test)

Ajoute un test à la suite.

2

void addTestSuite(Class<? extends TestCase> testClass)

Ajoute les tests de la classe donnée à la suite.

3

int countTestCases()

Compte le nombre de cas de test qui seront exécutés par ce test.

4

String getName()

Renvoie le nom de la suite.

5

void run(TestResult result)

Exécute les tests et collecte leur résultat dans un TestResult.

6

void setName(String name)

Définit le nom de la suite.

sept

Test testAt(int index)

Renvoie le test à l'index donné.

8

int testCount()

Renvoie le nombre de tests dans cette suite.

9

static Test warning(String message)

Renvoie un test qui échouera et consignera un message d'avertissement.

Créez un fichier de classe Java nommé JunitTestSuite.java dans C: \> JUNIT_WORKSPACE pour créer la suite de tests.

import junit.framework.*;

public class JunitTestSuite {
   public static void main(String[] a) {
      // add the test's in the suite
      TestSuite suite = new TestSuite(TestJunit1.class, TestJunit2.class, TestJunit3.class );
      TestResult result = new TestResult();
      suite.run(result);
      System.out.println("Number of test cases = " + result.runCount());
   }
}

Compilez les classes de la suite de tests à l'aide de javac.

C:\JUNIT_WORKSPACE>javac JunitTestSuite.java

Exécutez maintenant la suite de tests.

C:\JUNIT_WORKSPACE>java JunitTestSuite

Vérifiez la sortie.

No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
Number of test cases = 3

Ici, nous allons voir un exemple complet de test JUnit utilisant la classe POJO, la classe de logique métier et une classe de test, qui sera exécutée par le testeur.

Créer EmployeeDetails.java dans C: \> JUNIT_WORKSPACE, qui est une classe POJO.

public class EmployeeDetails {

   private String name;
   private double monthlySalary;
   private int age;
   
   /**
   * @return the name
   */
	
   public String getName() {
      return name;
   }
	
   /**
   * @param name the name to set
   */
	
   public void setName(String name) {
      this.name = name;
   }
	
   /**
   * @return the monthlySalary
   */
	
   public double getMonthlySalary() {
      return monthlySalary;
   }
	
   /**
   * @param monthlySalary the monthlySalary to set
   */
	
   public void setMonthlySalary(double monthlySalary) {
      this.monthlySalary = monthlySalary;
   }
	
   /**
   * @return the age
   */
   public int getAge() {
      return age;
   }
	
   /**
   * @param age the age to set
   */
   public void setAge(int age) {
      this.age = age;
   }
}

EmployeeDetails la classe est utilisée pour -

  • obtenir / définir la valeur du nom de l'employé.
  • obtenir / définir la valeur du salaire mensuel de l'employé.
  • obtenir / définir la valeur de l'âge de l'employé.

Créez un fichier appelé EmpBusinessLogic.java dans C: \> JUNIT_WORKSPACE, qui contient la logique métier.

public class EmpBusinessLogic {
   // Calculate the yearly salary of employee
   public double calculateYearlySalary(EmployeeDetails employeeDetails) {
      double yearlySalary = 0;
      yearlySalary = employeeDetails.getMonthlySalary() * 12;
      return yearlySalary;
   }
	
   // Calculate the appraisal amount of employee
   public double calculateAppraisal(EmployeeDetails employeeDetails) {
      double appraisal = 0;
		
      if(employeeDetails.getMonthlySalary() < 10000){
         appraisal = 500;
      }else{
         appraisal = 1000;
      }
		
      return appraisal;
   }
}

EmpBusinessLogic la classe est utilisée pour calculer -

  • le salaire annuel d'un employé.
  • le montant de l'évaluation d'un employé.

Créez un fichier appelé TestEmployeeDetails.java dans C: \> JUNIT_WORKSPACE, qui contient les cas de test à tester.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestEmployeeDetails {
   EmpBusinessLogic empBusinessLogic = new EmpBusinessLogic();
   EmployeeDetails employee = new EmployeeDetails();

   //test to check appraisal
   @Test
   public void testCalculateAppriasal() {
      employee.setName("Rajeev");
      employee.setAge(25);
      employee.setMonthlySalary(8000);
		
      double appraisal = empBusinessLogic.calculateAppraisal(employee);
      assertEquals(500, appraisal, 0.0);
   }

   // test to check yearly salary
   @Test
   public void testCalculateYearlySalary() {
      employee.setName("Rajeev");
      employee.setAge(25);
      employee.setMonthlySalary(8000);
		
      double salary = empBusinessLogic.calculateYearlySalary(employee);
      assertEquals(96000, salary, 0.0);
   }
}

TestEmployeeDetails class est utilisé pour tester les méthodes de EmpBusinessLogicclasse. Il

  • teste le salaire annuel de l'employé.
  • teste le montant de l'évaluation de l'employé.

Ensuite, créez une classe java nommée TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

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) {
      Result result = JUnitCore.runClasses(TestEmployeeDetails.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez le scénario de test et les classes Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac EmployeeDetails.java 
EmpBusinessLogic.java TestEmployeeDetails.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

true

Affirmation

Toutes les assertions sont dans la classe Assert.

public class Assert extends java.lang.Object

Cette classe fournit un ensemble de méthodes d'assertion, utiles pour écrire des tests. Seules les affirmations ayant échoué sont enregistrées. Certaines des méthodes importantes de la classe Assert sont les suivantes:

Sr.No. Méthodes et description
1

void assertEquals(boolean expected, boolean actual)

Vérifie que deux primitives / objets sont égaux.

2

void assertTrue(boolean condition)

Vérifie qu'une condition est vraie.

3

void assertFalse(boolean condition)

Vérifie qu'une condition est fausse.

4

void assertNotNull(Object object)

Vérifie qu'un objet n'est pas nul.

5

void assertNull(Object object)

Vérifie qu'un objet est nul.

6

void assertSame(object1, object2)

La méthode assertSame () teste si deux références d'objet pointent vers le même objet.

sept

void assertNotSame(object1, object2)

La méthode assertNotSame () teste si deux références d'objet ne pointent pas vers le même objet.

8

void assertArrayEquals(expectedArray, resultArray);

La méthode assertArrayEquals () testera si deux tableaux sont égaux l'un à l'autre.

Utilisons certaines des méthodes mentionnées ci-dessus dans un exemple. Créez un fichier de classe Java nomméTestAssertions.java dans C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.*;

public class TestAssertions {

   @Test
   public void testAssertions() {
      //test data
      String str1 = new String ("abc");
      String str2 = new String ("abc");
      String str3 = null;
      String str4 = "abc";
      String str5 = "abc";
		
      int val1 = 5;
      int val2 = 6;

      String[] expectedArray = {"one", "two", "three"};
      String[] resultArray =  {"one", "two", "three"};

      //Check that two objects are equal
      assertEquals(str1, str2);

      //Check that a condition is true
      assertTrue (val1 < val2);

      //Check that a condition is false
      assertFalse(val1 > val2);

      //Check that an object isn't null
      assertNotNull(str1);

      //Check that an object is null
      assertNull(str3);

      //Check if two object references point to the same object
      assertSame(str4,str5);

      //Check if two object references not point to the same object
      assertNotSame(str1,str3);

      //Check whether two arrays are equal to each other.
      assertArrayEquals(expectedArray, resultArray);
   }
}

Ensuite, créez un fichier de classe Java nommé TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner2 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestAssertions.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez le scénario de test et les classes Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac TestAssertions.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

true

Annotation

Les annotations sont comme des méta-balises que vous pouvez ajouter à votre code et les appliquer à des méthodes ou en classe. Ces annotations dans JUnit fournissent les informations suivantes sur les méthodes de test -

  • quelles méthodes vont être exécutées avant et après les méthodes de test.
  • quelles méthodes s'exécutent avant et après toutes les méthodes, et.
  • quelles méthodes ou classes seront ignorées lors de l'exécution.

Le tableau suivant fournit une liste d'annotations et leur signification dans JUnit -

Sr.No. Annotation et description
1

@Test

L'annotation Test indique à JUnit que la méthode publique void à laquelle elle est attachée peut être exécutée en tant que scénario de test.

2

@Before

Plusieurs tests nécessitent des objets similaires créés avant de pouvoir s'exécuter. L'annotation d'une méthode void publique avec @Before entraîne l'exécution de cette méthode avant chaque méthode Test.

3

@After

Si vous allouez des ressources externes dans une méthode Before, vous devez les libérer après l'exécution du test. L'annotation d'une méthode void publique avec @After entraîne l'exécution de cette méthode après la méthode Test.

4

@BeforeClass

L'annotation d'une méthode void statique publique avec @BeforeClass entraîne son exécution une fois avant l'une des méthodes de test de la classe.

5

@AfterClass

Cela exécutera la méthode une fois tous les tests terminés. Cela peut être utilisé pour effectuer des activités de nettoyage.

6

@Ignore

L'annotation Ignorer est utilisée pour ignorer le test et ce test ne sera pas exécuté.

Créez un fichier de classe Java nommé JunitAnnotation.java dans C: \> JUNIT_WORKSPACE pour tester l'annotation.

import org.junit.After;
import org.junit.AfterClass;

import org.junit.Before;
import org.junit.BeforeClass;

import org.junit.Ignore;
import org.junit.Test;

public class JunitAnnotation {
	
   //execute before class
   @BeforeClass
   public static void beforeClass() {
      System.out.println("in before class");
   }

   //execute after class
   @AfterClass
   public static void  afterClass() {
      System.out.println("in after class");
   }

   //execute before test
   @Before
   public void before() {
      System.out.println("in before");
   }
	
   //execute after test
   @After
   public void after() {
      System.out.println("in after");
   }
	
   //test case
   @Test
   public void test() {
      System.out.println("in test");
   }
	
   //test case ignore and will not execute
   @Ignore
   public void ignoreTest() {
      System.out.println("in ignore test");
   }
}

Ensuite, créez un fichier de classe Java nommé TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter des annotations.

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) {
      Result result = JUnitCore.runClasses(JunitAnnotation.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez le scénario de test et les classes Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac JunitAnnotation.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

in before class
in before
in test
in after
in after class
true

Ce chapitre explique la procédure d'exécution des méthodes dans JUnit, qui définit l'ordre des méthodes appelées. La procédure d'exécution des méthodes de l'API de test JUnit avec un exemple est abordée ci-dessous.

Créez un fichier de classe Java nommé ExecutionProcedureJunit.java dans C: \> JUNIT_WORKSPACE pour tester l'annotation.

import org.junit.After;
import org.junit.AfterClass;

import org.junit.Before;
import org.junit.BeforeClass;

import org.junit.Ignore;
import org.junit.Test;

public class ExecutionProcedureJunit {
	
   //execute only once, in the starting 
   @BeforeClass
   public static void beforeClass() {
      System.out.println("in before class");
   }

   //execute only once, in the end
   @AfterClass
   public static void  afterClass() {
      System.out.println("in after class");
   }

   //execute for each test, before executing test
   @Before
   public void before() {
      System.out.println("in before");
   }
	
   //execute for each test, after executing test
   @After
   public void after() {
      System.out.println("in after");
   }
	
   //test case 1
   @Test
   public void testCase1() {
      System.out.println("in test case 1");
   }

   //test case 2
   @Test
   public void testCase2() {
      System.out.println("in test case 2");
   }
}

Ensuite, créez un fichier de classe Java nommé TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter des annotations.

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) {
      Result result = JUnitCore.runClasses(ExecutionProcedureJunit.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez le scénario de test et les classes Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac ExecutionProcedureJunit.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

in before class
in before
in test case 1
in after
in before
in test case 2
in after
in after class

Voir la sortie ci-dessus. La procédure d'exécution est la suivante -

  • Tout d'abord, la méthode beforeClass () ne s'exécute qu'une seule fois.
  • La méthode afterClass () ne s'exécute qu'une seule fois.
  • La méthode before () s'exécute pour chaque cas de test, mais avant d'exécuter le cas de test.
  • La méthode after () s'exécute pour chaque cas de test, mais après l'exécution du cas de test.
  • Entre avant () et après (), chaque scénario de test s'exécute.

Les cas de test sont exécutés en utilisant JUnitCoreclasse. JUnitCore est une façade pour exécuter des tests. Il prend en charge l'exécution des tests JUnit 4, des tests JUnit 3.8.x et des mélanges. Pour exécuter des tests à partir de la ligne de commande, exécutez java org.junit.runner.JUnitCore <TestClass>. Pour les exécutions de test ponctuelles, utilisez la méthode statique runClasses (Class []).

Voici la déclaration pour org.junit.runner.JUnitCore classe:

public class JUnitCore extends java.lang.Object

Nous verrons ici comment exécuter les tests à l'aide de JUnitCore.

Créer une classe

Créez une classe java à tester, disons, MessageUtil.java, dans C: \> JUNIT_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
	
}

Créer une classe de cas de test

  • Créez une classe de test java, par exemple TestJunit.java.

  • Ajoutez une méthode de test testPrintMessage () à votre classe de test.

  • Ajoutez un Annotaion @Test à la méthode testPrintMessage ().

  • Implémentez la condition de test et vérifiez la condition à l'aide de l'API assertEquals de JUnit.

Créez un fichier de classe Java nommé TestJunit.java dans C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      assertEquals(message,messageUtil.printMessage());
   }
}

Créer une classe Test Runner

Créez maintenant un fichier de classe Java nommé TestRunner.javadans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test. Il importe la classe JUnitCore et utilise la méthode runClasses () qui prend le nom de la classe de test comme paramètre.

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez le scénario de test et les classes Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

Hello World
true

Test suiteest utilisé pour regrouper quelques cas de test unitaires et les exécuter ensemble. Dans JUnit, les deux@RunWith et @Suiteles annotations sont utilisées pour exécuter les tests de la suite. Ce chapitre prend un exemple ayant deux classes de test,TestJunit1 & TestJunit2, qui fonctionnent ensemble à l'aide de Test Suite.

Créer une classe

Créez une classe java à tester, disons, MessageUtil.java dans C: \> JUNIT_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Créer des classes de cas de test

Créez un fichier de classe Java nommé TestJunit1.java dans C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit1 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");    
      assertEquals(message, messageUtil.printMessage());     
   }
}

Créez un fichier de classe Java nommé TestJunit2.java dans C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit2 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
 
   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Créer une classe de suite de tests

  • Créez une classe java.
  • Attachez l'annotation @RunWith (Suite.class) à la classe.
  • Ajoutez une référence aux classes de test JUnit à l'aide de l'annotation @ Suite.SuiteClasses.

Créez un fichier de classe Java nommé TestSuite.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)

@Suite.SuiteClasses({
   TestJunit1.class,
   TestJunit2.class
})

public class JunitTestSuite {   
}

Créer une classe Test Runner

Créez un fichier de classe Java nommé TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

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) {
      Result result = JUnitCore.runClasses(JunitTestSuite.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez toutes les classes java en utilisant javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit1.java 
TestJunit2.java JunitTestSuite.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera le scénario de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi Robert
true

Parfois, il arrive que notre code ne soit pas complètement prêt lors de l'exécution d'un cas de test. En conséquence, le scénario de test échoue. le@Ignore l'annotation aide dans ce scénario.

  • Une méthode de test annotée avec @Ignore ne sera pas exécutée.

  • Si une classe de test est annotée avec @Ignore, aucune de ses méthodes de test ne sera exécutée.

Voyons maintenant @Ignore en action.

Créer une classe

Créez une classe java à tester, disons, MessageUtil.java dans C: \> JUNIT_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
	
}

Créer une classe de cas de test

  • Créez une classe de test java, par exemple TestJunit.java.

  • Ajoutez une méthode de test testPrintMessage () ou testSalutationMessage () à votre classe de test.

  • Ajoutez un Annotaion @Ignore à la méthode testPrintMessage ().

Créez un fichier de classe Java nommé TestJunit.java dans C: \ JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Ignore
   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Robert";
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
	
}

Créer une classe Test Runner

Créez un fichier de classe Java nommé TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez les classes MessageUtil, Test case et Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Exécutez maintenant le Test Runner, qui n'exécutera pas le scénario de test testPrintMessage () défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie. Le cas de test testPrintMessage () n'est pas testé.

Inside testSalutationMessage()
Hi!Robert
true

Maintenant, mettez à jour TestJunit dans C: \> JUNIT_WORKSPACE pour ignorer tous les cas de test. Ajoutez @Ignore au niveau de la classe.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

@Ignore
public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
     
   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Robert";
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
	
}

Compilez le scénario de test à l'aide de javac.

C:\JUNIT_WORKSPACE>javac TestJunit.java

Gardez votre Test Runner inchangé comme suit -

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Exécutez maintenant le Test Runner, qui n'exécutera aucun cas de test défini dans la classe de scénario de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie. Aucun cas de test n'est testé.

true

JUnit fournit une option pratique de Timeout. Si un scénario de test prend plus de temps que le nombre de millisecondes spécifié, JUnit le marquera automatiquement comme ayant échoué. letimeoutLe paramètre est utilisé avec l'annotation @Test. Voyons le @Test (timeout) en action.

Créer une classe

Créez une classe java à tester, disons, MessageUtil.java dans C: \> JUNIT_WORKSPACE.

Ajoutez une boucle while infinie à l'intérieur de la méthode printMessage ().

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public void printMessage(){
      System.out.println(message);
      while(true);
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Créer une classe de cas de test

Créez une classe de test java, par exemple, TestJunit.java. Ajoutez un délai d'expiration de 1000 au scénario de test testPrintMessage ().

Créez un fichier de classe Java nommé TestJunit.java dans C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test(timeout = 1000)
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      messageUtil.printMessage();     
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Créer une classe Test Runner

Créez un fichier de classe Java nommé TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez les classes MessageUtil, Test case et Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera les cas de test définis dans la classe de cas de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie. Le cas de test testPrintMessage () marquera l'échec du test unitaire.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
testPrintMessage(TestJunit): test timed out after 1000 milliseconds
false

JUnit fournit une option de suivi de la gestion des exceptions du code. Vous pouvez tester si le code lève une exception souhaitée ou non. leexpectedLe paramètre est utilisé avec l'annotation @Test. Voyons @Test (attendu) en action.

Créer une classe

Créez une classe java à tester, disons, MessageUtil.java dans C: \> JUNIT_WORKSPACE.

Ajoutez une condition d'erreur dans la méthode printMessage ().

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public void printMessage(){
      System.out.println(message);
      int a = 0;
      int b = 1/a;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Créer une classe de cas de test

Créez une classe de test java appelée TestJunit.java. Ajoutez une exception ArithmeticException attendue au scénario de test testPrintMessage ().

Créez un fichier de classe Java nommé TestJunit.java dans C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test(expected = ArithmeticException.class)
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      messageUtil.printMessage();     
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Créer une classe Test Runner

Créez un fichier de classe Java nommé TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

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) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez les classes MessageUtil, Test case et Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera les cas de test définis dans la classe de cas de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie. Le cas de test testPrintMessage () sera passé.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
true

JUnit 4 a introduit une nouvelle fonctionnalité appelée parameterized tests. Les tests paramétrés permettent à un développeur d'exécuter le même test encore et encore en utilisant des valeurs différentes. Vous devez suivre cinq étapes pour créer un test paramétré.

  • Annoter la classe de test avec @RunWith (Parameterized.class).

  • Créez une méthode statique publique annotée avec @Parameters qui renvoie une collection d'objets (sous forme de tableau) en tant qu'ensemble de données de test.

  • Créez un constructeur public qui prend ce qui équivaut à une «ligne» de données de test.

  • Créez une variable d'instance pour chaque "colonne" de données de test.

  • Créez votre ou vos cas de test en utilisant les variables d'instance comme source des données de test.

Le scénario de test sera appelé une fois pour chaque ligne de données. Voyons les tests paramétrés en action.

Créer une classe

Créez une classe java à tester, disons, PrimeNumberChecker.java dans C: \> JUNIT_WORKSPACE.

public class PrimeNumberChecker {
   public Boolean validate(final Integer primeNumber) {
      for (int i = 2; i < (primeNumber / 2); i++) {
         if (primeNumber % i == 0) {
            return false;
         }
      }
      return true;
   }
}

Créer une classe de cas de test paramétrée

Créez une classe de test java, par exemple, PrimeNumberCheckerTest.java. Créez un fichier de classe Java nomméPrimeNumberCheckerTest.java dans C: \> JUNIT_WORKSPACE.

import java.util.Arrays;
import java.util.Collection;
 
import org.junit.Test;
import org.junit.Before;

import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;

@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
   private Integer inputNumber;
   private Boolean expectedResult;
   private PrimeNumberChecker primeNumberChecker;

   @Before
   public void initialize() {
      primeNumberChecker = new PrimeNumberChecker();
   }

   // Each parameter should be placed as an argument here
   // Every time runner triggers, it will pass the arguments
   // from parameters we defined in primeNumbers() method
	
   public PrimeNumberCheckerTest(Integer inputNumber, Boolean expectedResult) {
      this.inputNumber = inputNumber;
      this.expectedResult = expectedResult;
   }

   @Parameterized.Parameters
   public static Collection primeNumbers() {
      return Arrays.asList(new Object[][] {
         { 2, true },
         { 6, false },
         { 19, true },
         { 22, false },
         { 23, true }
      });
   }

   // This test will run 4 times since we have 5 parameters defined
   @Test
   public void testPrimeNumberChecker() {
      System.out.println("Parameterized Number is : " + inputNumber);
      assertEquals(expectedResult, 
      primeNumberChecker.validate(inputNumber));
   }
}

Créer une classe Test Runner

Créez un fichier de classe Java nommé TestRunner.java dans C: \> JUNIT_WORKSPACE pour exécuter le ou les cas de test.

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) {
      Result result = JUnitCore.runClasses(PrimeNumberCheckerTest.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilez les classes PrimeNumberChecker, PrimeNumberCheckerTest et Test Runner à l'aide de javac.

C:\JUNIT_WORKSPACE>javac PrimeNumberChecker.java PrimeNumberCheckerTest.java
TestRunner.java

Exécutez maintenant le Test Runner, qui exécutera les cas de test définis dans la classe de cas de test fournie.

C:\JUNIT_WORKSPACE>java TestRunner

Vérifiez la sortie.

Parameterized Number is : 2
Parameterized Number is : 6
Parameterized Number is : 19
Parameterized Number is : 22
Parameterized Number is : 23
true

Nous aurons un exemple pour montrer comment exécuter JUnit en utilisant ANT. Suivez les étapes ci-dessous.

Étape 1: Téléchargez Apache Ant

Téléchargez Apache Ant en fonction du système d'exploitation sur lequel vous travaillez.

OS Nom de l'archive
les fenêtres apache-ant-1.8.4-bin.zip
Linux apache-ant-1.8.4-bin.tar.gz
Mac apache-ant-1.8.4-bin.tar.gz

Étape 2: définir l'environnement Ant

Met le ANT_HOMEvariable d'environnement pour pointer vers l'emplacement du répertoire de base, où les bibliothèques ANT sont stockées sur votre machine. Supposons que les bibliothèques Ant soient stockées dans le dossier apache-ant-1.8.4.

Sr.No. OS et description
1

Windows

Définissez la variable d'environnement ANT_HOME sur C: \ Program Files \ Apache Software Foundation \ apache-ant-1.8.4

2

Linux

export ANT_HOME = /usr/local/apache-ant-1.8.4

3

Mac

export ANT_HOME = /Library/apache-ant-1.8.4

Ajoutez l'emplacement du compilateur Ant au chemin système comme suit -

OS Production
les fenêtres Ajouter la chaîne %ANT_HOME\bin à la fin de la variable système, Path.
Linux export PATH = $PATH:$ANT_HOME / bin /
Mac non requis

Étape 3: Téléchargez l'archive JUnit

Téléchargez une archive JUnit adaptée à votre système d'exploitation.

OS Nom de l'archive
les fenêtres junit4.10.jar
Linux junit4.10.jar
Mac junit4.10.jar

Étape 4: Créer une structure de projet

  • Créer un dossier TestJunitWithAnt dans C: \> JUNIT_WORKSPACE.

  • Créer un dossier src dans C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Créer un dossier test dans C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Créer un dossier lib dans C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Créer MessageUtil classe dans C: \> JUNIT_WORKSPACE> TestJunitWithAnt> srcfolder.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Créer TestMessageUtil class dans le dossier C: \> JUNIT_WORKSPACE> TestJunitWithAnt> src.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestMessageUtil {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Copiez junit-4.10.jar dans le dossier C: \> JUNIT_WORKSPACE> TestJunitWithAnt> lib.

Créer ANT Build.xml

Nous utiliserons <junit> tâche dans Ant pour exécuter nos cas de test JUnit.

<project name = "JunitTest" default = "test" basedir = ".">
   <property name = "testdir" location = "test" />
   <property name = "srcdir" location = "src" />
   <property name = "full-compile" value = "true" />
	
   <path id = "classpath.base"/>
	
   <path id = "classpath.test">
      <pathelement location = "lib/junit-4.10.jar" />
      <pathelement location = "${testdir}" /> <pathelement location = "${srcdir}" />
      <path refid = "classpath.base" />
   </path>
	
   <target name = "clean" >
      <delete verbose = "${full-compile}"> <fileset dir = "${testdir}" includes = "**/*.class" />
      </delete>
   </target>
	
   <target name = "compile" depends = "clean">
      <javac srcdir = "${srcdir}" destdir = "${testdir}" 
         verbose = "${full-compile}">
         <classpath refid = "classpath.test"/>
      </javac>
   </target>
	
   <target name = "test" depends = "compile">
      <junit>
         <classpath refid = "classpath.test" />
         <formatter type = "brief" usefile = "false" />
         <test name = "TestMessageUtil" />
      </junit>
   </target>
	
</project>

Exécutez la commande Ant suivante.

C:\JUNIT_WORKSPACE\TestJunitWithAnt>ant

Vérifiez la sortie.

Buildfile: C:\JUNIT_WORKSPACE\TestJunitWithAnt\build.xml

clean:  

compile:  
   [javac] Compiling 2 source files to C:\JUNIT_WORKSPACE\TestJunitWithAnt\test
   [javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
      MessageUtil.java]
   [javac] [parsing completed 18ms]
   [javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
      TestMessageUtil.java]
   [javac] [parsing completed 2ms]
   [javac] [search path for source files: C:\JUNIT_WORKSPACE\
      TestJunitWithAnt\src]    
   [javac] [loading java\lang\Object.class(java\lang:Object.class)]
   [javac] [loading java\lang\String.class(java\lang:String.class)]
   [javac] [loading org\junit\Test.class(org\junit:Test.class)]
   [javac] [loading org\junit\Ignore.class(org\junit:Ignore.class)]
   [javac] [loading org\junit\Assert.class(org\junit:Assert.class)]
   [javac] [loading java\lang\annotation\Retention.class
      (java\lang\annotation:Retention.class)]
   [javac] [loading java\lang\annotation\RetentionPolicy.class
      (java\lang\annotation:RetentionPolicy.class)]
   [javac] [loading java\lang\annotation\Target.class
      (java\lang\annotation:Target.class)]
   [javac] [loading java\lang\annotation\ElementType.class
      (java\lang\annotation:ElementType.class)]
   [javac] [loading java\lang\annotation\Annotation.class
      (java\lang\annotation:Annotation.class)]
   [javac] [checking MessageUtil]
   [javac] [loading java\lang\System.class(java\lang:System.class)]
   [javac] [loading java\io\PrintStream.class(java\io:PrintStream.class)]
   [javac] [loading java\io\FilterOutputStream.class
      (java\io:FilterOutputStream.class)]
   [javac] [loading java\io\OutputStream.class(java\io:OutputStream.class)]
   [javac] [loading java\lang\StringBuilder.class
      (java\lang:StringBuilder.class)]
   [javac] [loading java\lang\AbstractStringBuilder.class
      (java\lang:AbstractStringBuilder.class)]
   [javac] [loading java\lang\CharSequence.class(java\lang:CharSequence.class)]
   [javac] [loading java\io\Serializable.class(java\io:Serializable.class)]
   [javac] [loading java\lang\Comparable.class(java\lang:Comparable.class)]
   [javac] [loading java\lang\StringBuffer.class(java\lang:StringBuffer.class)]
   [javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\MessageUtil.class]
   [javac] [checking TestMessageUtil]
   [javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\TestMessageUtil.class]
   [javac] [total 281ms]

test:
    [junit] Testsuite: TestMessageUtil
    [junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.008 sec
    [junit]
    [junit] ------------- Standard Output ---------------
    [junit] Inside testPrintMessage()
    [junit] Robert
    [junit] Inside testSalutationMessage()
    [junit] Hi!Robert
    [junit] ------------- ---------------- ---------------

BUILD SUCCESSFUL
Total time: 0 seconds

Pour configurer JUnit avec eclipse, suivez les étapes ci-dessous.

Étape 1: Téléchargez l'archive JUnit

Téléchargez un fichier JUnit basé sur le système d'exploitation que vous avez sur votre système.

OS Nom de l'archive
les fenêtres junit4.10.jar
Linux junit4.10.jar
Mac junit4.10.jar

Supposons que vous ayez copié le fichier JAR ci-dessus dans le dossier C: \> JUnit.

Étape 2: définir l'environnement Eclipse

Ouvrez eclipse → faites un clic droit sur le projet et cliquez sur propriété> Build Path> Configure Build Path et ajoutez le junit-4.10.jar dans les bibliothèques en utilisant le bouton Add External Jar.

Nous supposons que votre Eclipse a un plugin JUnit intégré. S'il n'est pas disponible dans le répertoire C: \> eclipse \ plugins, vous pouvez le télécharger depuisJUnit Plugin. Décompressez le fichier zip téléchargé dans le dossier plugin de l'Eclipse. Enfin, redémarrez Eclipse.

Votre Eclipse est maintenant prêt pour le développement de cas de test JUnit.

Étape 3: Vérifiez l'installation de JUnit dans Eclipse

Créer un projet TestJunitdans Eclipse à n'importe quel endroit. Puis créez une classeMessageUtil à tester dans le projet.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
}

Créer une classe de test TestJunit dans le projet.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {	  
      assertEquals(message,messageUtil.printMessage());
   }
}

Voici la structure du projet -

Enfin, cliquez avec le bouton droit sur le programme et exécutez en tant que JUnit pour vérifier la sortie du programme.

Vérifiez le résultat.

Voici les extensions JUnit -

  • Cactus
  • JWebUnit
  • XMLUnit
  • MockObject

Cactus

Cactus est un framework de test simple pour les tests unitaires de code Java côté serveur (servlets, EJB, librairies de balises, filtres). L'intention de Cactus est de réduire le coût d'écriture des tests pour le code côté serveur. Il utilise JUnit et l'étend. Cactus implémente une stratégie dans le conteneur qui exécute les tests à l'intérieur d'un conteneur.

L'écosystème de cactus est composé de plusieurs composants -

  • Cactus Frameworkest le cœur de Cactus. C'est le moteur qui fournit l'API pour écrire les tests Cactus.

  • Cactus Integration Modules sont des interfaces et des frameworks qui fournissent des moyens simples d'utiliser le Framework Cactus (scripts Ant, plugin Eclipse et plugin Maven).

Le code suivant montre comment Cactus peut être utilisé.

import org.apache.cactus.*;
import junit.framework.*;

public class TestSampleServlet extends ServletTestCase {
   @Test
   public void testServlet() {
      // Initialize class to test
      SampleServlet servlet = new SampleServlet();

      // Set a variable in session as the doSomething()
      // method that we are testing 
      session.setAttribute("name", "value");

      // Call the method to test, passing an 
      // HttpServletRequest object (for example)
      String result = servlet.doSomething(request);

      // Perform verification that test was successful
      assertEquals("something", result);
      assertEquals("otherValue", session.getAttribute("otherName"));
   }
}

JWebUnit

JWebUnit est un framework de test basé sur Java pour les applications Web. Il enveloppe les cadres de test existants tels que HtmlUnit et Selenium avec une interface de test unifiée et simple pour tester l'exactitude de vos applications Web.

JWebUnit fournit une API Java de haut niveau pour naviguer dans une application Web combinée à un ensemble d'assertions pour vérifier l'exactitude de l'application. Cela comprend la navigation via des liens, la saisie et la soumission de formulaires, la validation du contenu de la table et d'autres fonctionnalités d'applications Web d'entreprise typiques.

Les méthodes de navigation simples et les assertions prêtes à l'emploi permettent une création de test plus rapide que d'utiliser uniquement JUnit ou HtmlUnit. Et si vous souhaitez passer de HtmlUnit à d'autres plugins tels que Selenium (bientôt disponible), il n'est pas nécessaire de réécrire vos tests.

Voici un exemple de code.

import junit.framework.TestCase;
import net.sourceforge.jwebunit.WebTester;

public class ExampleWebTestCase extends TestCase {
   private WebTester tester;
   
   public ExampleWebTestCase(String name) {
      super(name);
      tester = new WebTester();
   }
	
   //set base url
   public void setUp() throws Exception {
      getTestContext().setBaseUrl("http://myserver:8080/myapp");
   }
	
   // test base info
   @Test
   public void testInfoPage() {
      beginAt("/info.html");
   }
}

XMLUnit

XMLUnit fournit une seule classe d'extension JUnit, XMLTestCase, et un ensemble de classes de prise en charge qui permettent de faire des assertions sur -

  • Les différences entre deux morceaux de XML (via les classes Diff et DetailedDiff).

  • La validité d'un morceau de XML (via la classe Validator).

  • Le résultat de la transformation d'un morceau de XML à l'aide de XSLT (via la classe Transform).

  • L'évaluation d'une expression XPath sur un morceau de XML (via des classes implémentant l'interface XpathEngine).

  • Nœuds individuels dans un morceau de XML qui sont exposés par DOM Traversal (via la classe NodeTest).

Supposons que nous ayons deux morceaux de XML que nous souhaitons comparer et affirmons qu'ils sont égaux. Nous pourrions écrire une classe de test simple comme celle-ci -

import org.custommonkey.xmlunit.XMLTestCase;

public class MyXMLTestCase extends XMLTestCase {

   // this test method compare two pieces of the XML
   @Test
   public void testForXMLEquality() throws Exception {
      String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
      String myTestXML = "<msg><localId>2376</localId></msg>";
      assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML);
   }
}

MockObject

Dans un test unitaire, les objets fictifs peuvent simuler le comportement d'objets complexes et réels (non simulés) et sont donc utiles lorsqu'un objet réel est peu pratique ou impossible à incorporer dans un test unitaire.

Le style de codage courant pour tester avec des objets fictifs est de -

  • Créez des instances d'objets fictifs.
  • Définissez l'état et les attentes dans les objets fictifs.
  • Appelez le code de domaine avec des objets fictifs comme paramètres.
  • Vérifiez la cohérence des objets fictifs.

Ci-dessous, un exemple de MockObject utilisant Jmock.

import org.jmock.Mockery;
import org.jmock.Expectations;

class PubTest extends TestCase {
   Mockery context = new Mockery();
   public void testSubReceivesMessage() {
      // set up
      final Sub sub = context.mock(Sub.class);

      Pub pub = new Pub();
      pub.add(sub);
    
      final String message = "message";
      
      // expectations
      context.checking(new Expectations() {
         oneOf (sub).receive(message);
      });

      // execute
      pub.publish(message);
      
      // verify
      context.assertIsSatisfied();
   }
}