Besoin

Fournir un framework de test unitaire en Java.

Analyse

Un cas de test (test case) peut être considéré comme le pendant d'un cas d'utilisation (use case). Pour chaque scénario de ce dernier, il propose un test validant son implémentation.

Conception

Un cas de test JUnit est constitué d'une classe contenant :

  • un montage (fixture) d'objets sur lesquels les scénarios du test vont être exécutés
  • un ensemble de scénarios du cas de test

Implémentation

Toute classe de test hérite de junit.framework.TestCase et implémente autant de méthode testXxx() que de scénarios à tester.

Elle peut redéfinir si elle le souhaite :

  • setUp() pour initialiser le montage (fixture) des objets soumis au test
  • et tearDown() pour le nettoyage de fin de test.

Exemples

Un exemple de classe de test JUnit est :

import junit.framework.*;
import org.javarome.exemple.MaClasse;

public
class MonTest extends TestCase {

  public MonTest (String someTestName) {
     super (someTestName);
  }

  protected void setUp()
{
     // Initialisation des tests
  }

  public void testScenario1() {
     // Code du test de scénario 1
     final String expected = "EXPECTED RESULT";
     String tested = new MaClasse().method ();
     assertTrue (expected.equals (tested));
  }

  public void testScenario2() {
     // Code du test de scénario 2
  }

  protected void tearDown() {
     // Nettoyage fin de test
  }
}

Notes

  • Open Source
  • JUnitX étend JUnit pour tester l'état interne d'un système (accès au code protégé et privé des classes). XPTest intègre JUnit et JUnitX dans TCC.
  • Cactus étend JUnit pour les tests côté serveur
  • Réalisé par Ken Beck, Erich Gamma et Erik Meade
  • Peut s'exécuter en mode texte ou graphique (GUI).

Limitations

  • Les objets montés (fixtures) sont réinitialisés à chaque exécution de scénario.
  • En mode graphique (GUI), un ClassLoader spécifique est utilisé pour le rechargement des classes. Celui-ci peut générer des ClassCastException, faisant échouer certains test à tort.