JUnit - Premier pas avec les tests unitaires JUnit

Dans cet article, il me fait plaisir de vous présenter le framework de test JUnit.




Qu'est-ce que JUnit?

JUnit est une bibliothèque de test unitaire pour le langage de programmation Java.
Elle nous permet de développer des stratégies de tests pour nos applications,
afin d'en tester leurs comportements et ce principalement sur les méthodes que nous
écrivons qui seront utilisés par notre main.


Nous créerons une application toute simple. Il s'agit d'une Calculatrice qui permet
6 fonctions:

  • additionner(int x, int y)
  • soustraire(int x, int y)
  • multiplier(int x, int y)
  • diviser(int x, int y)
  • getResultat(Calculatrice calculatrice)
  • effacerResultat(Calculatrice calculatrice)



Principalement l'application que nous écrirons servira à construire une calculatrice, mais nous
testerons spécifiquement au cours de cet article les méthodes rattachées à notre calculatrice.
Ainsi notre stratégie de test, quoique simpliste et dans le seul but de démontrer l'utilisation de JUnit,
consistera à tester la méthode additionner(int x, int y) et les constructeurs de notre calculatrice:
Calculatrice() et Calculatrice( int x, int y).





Utilisation de l'IDE Eclipse

Pour ceux qui ne sont pas familier avec Eclipse vous pouvez le télécharger ici
Je n'expliquerai pas d'avantage Eclipse car ce n'est pas le but de l'article.

Veuillez importer mon projet dans eclipse Projet Eclipse JUnit

Pour ceux et celles qui désirent s'initier à Eclipse, allez jetter un coup d'oeil sur ce tutoriel




Classes Java

Dans cette section de l'article je vais simplement vous donner le code de chacunes des classes du projet,
ainsi que le package dans lequel les classes se retrouvent.


Dans le package "org.ageei.junit.calculatrice" se trouve:

InterfaceCalculatrice.java

package org.ageei.junit.calculatrice;

import org.ageei.junit.calculatrice.Calculatrice;

/**
 * @author Dominick Rivard
 * @date 18 juin 2008
 * Définition des méthodes disponibles pour une calculatrice
 */

public interface InterfaceCalculatrice {

    public int additionner(int x, int y);

    public int soustraire(int x, int y);

    public int multiplier(int x, int y);

    public int diviser(int x, int y);

    public int getResultat(Calculatrice calculatrice);

    public void effacerResultat(Calculatrice calculatrice);
}

Calculatrice.java

package org.ageei.junit.calculatrice;

/**
 * Cette classe est fortement inspiré d'un démo
 * que nous avons eu au cours d'INF4375
 * Le code du cours que je n'ai pas copié mais dont je me suis
 * inspiré avait été écrit par Michel Rivard(Démonstrateur)
 * @author Dominick Rivard
 * @date 18 juin 2008
 */
public class Calculatrice implements InterfaceCalculatrice {

    private int x;
    private int y;
    private int resultat;

    /*
    * Construccteur par défaut
    */
    public Calculatrice() {
        super();
        this.x = 0;
        this.y = 0;
        this.resultat = x + y; 
    }

    /**
    * Constructeur avec des entier en paramêtre
    * @param x un entier quelconque
    * @param y un entier quelconque
    */
    public Calculatrice( int x, int y ) {
        this.x = x;
        this.y = y;
        this.resultat = 0;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getResultat() {
        return resultat;
    }

    private void setResultat(int resultat) {
        this.resultat = resultat;
    }

    /**  Méthode disponible sur une calculatrice **/

    public int additionner(int x, int y) {
        this.resultat = x + y;
        return resultat;
    }

    public int soustraire(int x, int y) {
        this.resultat = x - y;
        return resultat;
    }

    public int multiplier(int x, int y) {
        this.resultat = x * y;
        return resultat;
    }

    public int diviser(int x, int y) {
        this.resultat = x / y;
        return resultat;
    }

    public int getResultat(Calculatrice calculatrice) {
        return calculatrice.getResultat();
    }

    public void effacerResultat(Calculatrice calculatrice) {
        calculatrice.setResultat(0);
        calculatrice.setX(0);
        calculatrice.setY(0);
    }

}




Classe Java JUnit

Vous devez obligatoirement inclure le fichier JAR de JUnit
- il est présentement dans mon projet sous le dossier "lib/junit-4.4.jar"

aussi disponible ici sur le site web de JUnit

Comment procéder à l'importation de la librairie JUnit:



  1. Dans les propriétés du projet Eclipse
  2. Sous Java BuildPath
  3. Dans librairies
  4. Cliquez sur Add Externals JARs
  5. Parcourez le chemin jusqu'au fichier junit-4.4.jar



Dans le package "org.ageei.junit.tests" se trouve:

TestsJUnits.java

package org.ageei.junit.tests;

/**
 * Cette classe permet d'effectuer des tests JUnit sur la classe:
 *  org.ageei.junit.Calculatrice
 * @author Dominick Rivard
 * @date 18 juin 2008
 */

import org.ageei.junit.calculatrice.Calculatrice;
import org.junit.Test;
import static org.junit.Assert.*;

public class TestsJUnits {

    @Test
    public void testadditionner() {

        // Instanciation d'une calculatrice
        Calculatrice calculatrice = new Calculatrice();

        // x = 7 et y = 9
        calculatrice.setX(7);
        calculatrice.setY(9);

        // addition de 7 + 9 = 16
        calculatrice.additionner(calculatrice.getX(), calculatrice.getY());

        // Assertion afin de savoir si le test JUnit avec les éléments
        // x + y = 16 comme nous avons prédéfini que x = 7 et y = 9
        // le test devrait être bon car 9 + 7 = 16
        assertEquals(16, calculatrice.getResultat());
        System.out.println("Test JUnit\n");
        System.out.println("Test #1");
        System.out.println("X = " + calculatrice.getX());
        System.out.println("Y = " + calculatrice.getY());
        System.out.println("Total de x(" + calculatrice.getX() + ") + y(" + calculatrice.getY() + 
                          ") = " calculatrice.getResultat() + "\n");
    }

    @Test
    public void testConstructeurParam() {

        // Instanciation d'une calculatrice
        Calculatrice calculatrice = new Calculatrice(7, 9);

        // x = 7 | y = 9 | resultat = 0
        // Ce test devrait retourner les valeurs de x et y prises en paramêtre
        // et retourner le résultat approprié de notre constructeur avec paramêtre
        assertEquals(7, calculatrice.getX());
        System.out.println("Test #2");
        System.out.println("X = " + calculatrice.getX());
        assertEquals(9, calculatrice.getY());
        System.out.println("Y = " + calculatrice.getY());
        assertEquals(0, calculatrice.getResultat());
        System.out.println("Total = " + calculatrice.getResultat());

    }

}






Comment fonctionne le projet

Premièrement nous programmons une calculatrice, hors nous devons écrire l'interface qui nous dictera quels sont les
services disponible pour notre calculatrice. Cette interface se nomme InterfaceCalculatrice.java et définie les méthodes décritent
dans la partie "Qu'est-ce que JUnit?". Puis nous devions créer notre calculatrice, celle-ci est crée dans la classe Calculatrice.java.
Elle implémente toutes les fonctions de l'interface et permet d'exécuter une calculatrice.

C'est exactement ces fonctions que nous voudrons tester à l'aide de JUnit.

Puis notre dernière classe de notre projet est TestsJUnits.java, qui exécute les méthodes permettant de faire les tests JUnit.
Cette classe permet donc d'exécuter les tests sur la classe Calculatrice.java et retourne les messages d'erreurs s'il y a lieu ou non
lors de l'exécution des tests. Cette classe retourne aussi l'affichage à la console des résultats des tests.






Comment exécuter le Projet et les Tests JUnit






Premièrement afin d'être sur que le projet fonctionnera vous devez vérifier que vous avez tous les fichiers du projet,
ainis que la librairie JUnit d'importer dans ce dernier.

Vérifier que tous les packages et noms de classes sont bien présent, ainsi que la librairie JUnit.

/////////////////////////// à terminer ///////////////////////