Date de première publication : 2013/01/08
Si vous utilisez Eclipse ou Netbeans, il est important de créer un nouveau jeu de tests JUnit car cela permet d'ajouter la bibliothèque au projet.
Vérification des annotations
Voici un jeu de tests à lancer et à tester pour maîtriser les annotations :-) en version 4
public class AEssayer {
// il manque les imports ...
@BeforeClass
public static void init() {
System.out.println("initialisation");
}
@Test
@Ignore
public void test1() {
System.out.println("test 1");
assertFalse(true);
}
@Test
public void test2() {
System.out.println("test2");
assertTrue(true);
}
@Test
public void test3() {
System.out.println("test3");
assertFalse(false);
}
@AfterClass
public static void end() {
System.out.println("fin des tests");
}
@Before
public void before() throws Exception {
System.out.println("avant un test");
}
@After
public void after() {
System.out.println("apres un test");
}
}
En version 5 :
public class AEssayer {
// il manque les imports ...
@BeforeAll
public static void init() {
System.out.println("initialisation");
}
@Test
@Disabled
public void test1() {
System.out.println("test 1");
assertFalse(true);
}
@Test
public void test2() {
System.out.println("test2");
assertTrue(true);
}
@Test
public void test3() {
System.out.println("test3");
assertFalse(false);
}
@AfterAll
public static void end() {
System.out.println("fin des tests");
}
@BeforeEach
public void before() throws Exception {
System.out.println("avant un test");
}
@AfterEach
public void after() {
System.out.println("apres un test");
}
}
Tous les tests @Test
non ignorés @Ignore
|@Disabled
vont être exécutés mais il n'y a pas de garantie d'ordre.
Si des méthodes @Before
|@BeforeEach
ou @After
|@AfterEach
sont spécifiées, elles sont exécutées avant / après chaque test.
Les méthodes @BeforeClass
|@BeforeAll
ou @AfterClass
|@AfterAll
ne sont exécutées qu'une seule fois, avant et après les tests. Elles permettent de placer l'environnement de tests (fixture). Ce sont des méthodes de classe.
Mise en place de la classe à tester
Voici la classe toute simple que vous allez coder. Nous allons générer un maximum de code automatiquement avec Eclipse (les menus équivalents existent pour Netbeans)
Livre |
- titre : chaîne - prix : réel |
+ Livre(nom prix) + getNom/setNom() + getPrix/setPrix() + equals(o : Object) : booléen + equals(o : Object) : booléen |
- Créer la classe Livre avec ses attributs et générer automatiquement le code des autres méthodes. Dans le menu contextuel :
- Source > Generate Constructor using Fields
- Source > Generate Getters and Setters
- Source > Generate hashcode() et equals() en se limitant à l’attribut nom
- Corriger l’indentation du code
- Source > Correct indentation
- Ajouter une méthode
equals2()
qui renvoie toujours faux ! - Modifier les méthodes
hashcode()
etequals()
pour que la comparaison se fasse sans casse.
La classe java.lang.Object
définit deux méthodes equals()
et hashCode()
qui doivent être cohérentes pour déterminer si deux instances sont équivalentes ou pas.
- Créer une nouvelle classe (par exemple
LivreTest
) qui testera le code que l'on vient d'écrire : - (M) File > New > New JUnit Test
- (D) Sélectionner JUnit 4 (ou 5 ! mais pas 3)
- Eclipse pourra vous demander d'ajouter JUnit au projet courant
- Déclarer trois instances de
Livre
dans la classeLivreTest
et les instancier dans une méthode@BeforeClass
: deux livres doivent porter le même titre mais des prix différents et un titre différent
Les instances de Livre
sont des instances de classe.
- Créer une méthode
testEquals()
précédée de l'annotation@Test
qui teste si les titres de livres sont bien égaux ou pas avec les méthodesassertTrue()
etassertFalse()
- exécuter et relever les erreurs
- Écrire une méthode
testEquals2()
pour testerequals2()
- Restester
- Ignorer le test avec
@Ignore
et restester (la directive ne marche pas toujours, notamment en JUnit 5)