TD02 Test Et Validation 2
TD02 Test Et Validation 2
TD02 Test Et Validation 2
TD N° 02
Exercice 1:
L'objectif de TD est de vous faire utiliser l'outil JUnit. Cet outil vous permettra de créer des fichiers .java
contenant des programmes implémentant les tests unitaires.
Considérant la classe Lines suivante :
public class Lines {
private double AX,AY,BX,BY;
/* Constructeur de la droite passant par les points A et B.
* @param ax abscisse du premier point (A)
* @param ay ordonnées du premier point
* @param bx abscisse du second point (B)
* @param by ordonnée du second point
*/
public Lines(double ax, double ay,double bx, double by){
this.AX=ax;
this.AY=ay;
this.BX=bx;
this.BY=by;
}
public double getAX() {
return AX;
}
public void setAX(double aX) {
AX = aX;
}
public double getAY() {
return AY;
}
public void setAY(double aY) {
AY = aY;
}
public double getBX() {
return BX;
}
public void setBX(double bX) {
BX = bX;
}
public double getBY() {
return BY;
}
public void setBY(double bY) {
BY = bY;
}
1
1. Réaliser un premier test simple sur une fonction
Nous souhaitons écrire le code permettant de réaliser le test unitaire des deux méthodes slope et
compute_y.
Créer une nouvelle classe de Test: clique droit dans la vue package, puis New, puis JUnit Test Case.
Vérifiez les paramètres d'initialisation de la classe créée :
o Nom du package contenant la classe à tester
o Nom de la classe à tester, ici Lines
o Ne changez pas les cases à cocher.
o Depuis la version 4 de JUnit, les noms des classes et méthodes de test sont libres. Vous pouvez
remplacer le nom donné à la classe de test et aussi son emplacement
Passer à l'étape suivante (next), vous allez pouvoir sélectionner les méthodes pour lesquelles JUnit va
créer un squelette de cas de test.
Ajouter uniquement la méthode compute_y dans la liste des méthodes à tester et faire Finish
Il faut définir l'oracle qui permettra de décider si l'exécution de la méthode compute_y est correcte.
Cependant, vous vous pouvez déjà exécuter le test.
Cliquez droit sur le fichier java de test, puis Run as JUnit Test. Cette action ouvrira une vue permettant
d'avoir un bilan graphique de l'exécution des tests: ici chaque test échoue.
Il faut maintenant remplir la méthode avec le coeur du test : l'oracle. JUnit met à disposition un ensemble
assez riche de méthodes permettant d'implémenter des oracles relativement évolués. Ces méthodes sont les
assertions et sont regroupées dans le package JUnit.assert.
Pour écrire un bon oracle, il faut bien comprendre ce que fait la méthode. La méthode compute_y
représente l'un des cas les plus simples :
une méthode de classe (mot clés statique) avec des paramètres de type primitifs. L'exécution de la
méthode ne dépend que de ses paramètres d'entrée.
son exécution est sans effet de bord (pas de modification de variables, seul la valeur de retour atteste de
l'impact de son exécution),
son effet se limite à fixer sa valeur de retour, de type primitif (double).
En comparant le résultat de la méthode, sur des combinaisons d'entrée connues, aux valeurs attendues,
nous définissons l'oracle du test de compute_y.
Utiliser assertEquals (par exemple) pour valider le fait que compute_y doit retourner 0 si on lui passe
les paramètres (1,-1,1).
2. Création d'objets de Test
Vous devez disposer d'un objet Lines pour lui appliquer la méthode slope(). Cela veut dire que l'exécution
de slope() ne dépend pas uniquement de ses paramètres d'entrée mais aussi de l'objet sur lequel elle est
appelée. Il nous faut ces objets pour tester l'application (on les appelle objets de test par la suite).
Deux cas de figure : soit les objets de test que vous devez créer sont spécifiques à un cas de test (à une
méthode en gros), soit toutes les méthodes auront besoin de ces objets.
Dans le premier cas, vous devrez déclarer une variable du type souhaité (déclarer une variable du type
Lines) dans la méthode de test et appliquer la méthode à tester sur l'objet en question. Attention pensez à
bien initialiser l'objet.
Ajouter un cas de test à votre classe de test pour la méthode slope()
Déclarer l'objet L1 de type Lines sans l'instancier, puis utilisez L1.slope() dans la méthode de test.
Exécutez le test (Run as JUnit Test). Quel est le bilan ?
2
Vous devriez avoir une erreur. Vous pouvez voir le détail de l'erreur en cliquant sur la ligne précédée
d'une icône rouge dans le bilan détaillé. Le détail de la trace de défaillance vous donnera souvent la
solution du problème.
Instancier un objet ligne dans ce test pour valider la fonction de calcul de la pente d'une droite de pente
1.5
Il peut être nécessaire de valider plusieurs couples entrée/sortie. Si une méthode a deux comportements
très différents en fonction de ses entrées, il peut être utile de tester ces deux types d'entrées.
Exercice 2:
Soit le code java suivant, implémentant deux méthodes: la première (Trier) permet de trier un tableau
d'entiers, et la deuxième (Est_trie) permet de vérifier si un tableau passé en paramètre est trié ou non.
1) Déterminez un ensemble de données de test fonctionnel suivant une approche boite noire pour
tester la méthode Est_trie et implémenter ces cas de test à l'aide de JUnit.
2) Proposer des jeux de tests pour la méthode Trier et les implémenter à l'aide de JUnit.