Chapitre Les tests unitaires avec JUnit
Démarrer avec JUnit
Cette leçon présente rapidement les bases de JUnit. Notamment le cycle de vie de JUnit et la structure d'un test unitaire.
Dernière modification : Dec 08 , 2024
Démarrer avec JUnit
Qu'est ce que JUnit ?
JUnit est une framework pour écrire et exécuter des tests unitaires
JUnit 4 était composé d'un unique Jar.
Désormais JUnit 5 a été décomposé
- JUNIT Platform
- JUNIT Jupiter
- JUNIT Vintage

Les étapes importantes
Le test en 4 phases
(setup, exercise, verify, teardown)
- Préparer le SUT ( System under test ) aussi appelé Fixture.
- Réaliser le test
- Vérifier le résultat
- Nettoyer l'environnement
Préparer le test
JUNIT 4
class MyFirstTest {
@Before
public void beforeTest() {
}
@BeforeClass
public static void beforeAllTestsFromTheClass() {
}
}
JUNIT 5
class MyFirstTest {
@BeforeEach
public void beforeTest() {
}
@BeforeAll
public static void beforeAllTestsFromTheClass() {
}
}
Réaliser le test
Comment créer un test ?
- Créer une méthode ( obligatoirement publique en JUNIT 4 )
- La nommer avec le nom de la méthode testée suffixée de test ( non obligatoire ou tout autre nom approprié)
- Ecrire l'action à exécuter ( par exemple en se basant sur l'approche GIVEN/WHEN/THEN)
- Le nom de l'annotation est la même en JUNIT 4 et 5, seul le package est différent.
JUNIT 4/5
class MyFirstTest {
/** FIXTURE SETUP **/
../..
@Test
public void testMaMethode() {
// WHEN
// THEN
// AND
}
}
Vérifier le test
Comment vérifier l'exécution d'un test
- Il faut provoquer l'échec du test
- Plusieurs facons sont possibles
- Lancer une exception (bof)
- Afficher un message dans les logs ( personne ne le lira)
- Utiliser un framework d'assertions comme celui de JUnit ou d'AssertJ
JUNIT 4
class MyFirstTest {
@Test
public void testAddition() {
int res = Calcul.add(2,4);
Assert.assertEquals(6, res); // paresseux
Assert.assertEquals("2+4 font 6", 6, res); // avec message
assertEquals("2+4 font 6", 6, res); // import static
Assert.assertThat(res).as("2+4 font 6").isEquals(6);
}
}
JUNIT 5
class MyFirstTest {
@Test
public void testAddition() {
int res = Calcul.add(2,4);
Assertions.assertEquals(6, res); // paresseux
Assertions.assertEquals(6, res, "2+4 font 6"); // avec message
assertEquals("2+4 font 6", 6, res); // import static
Assert.assertThat(res).as("2+4 font 6").isEquals(6);
}
}
Nettoyer après le test

Comment nettoyer un test
- Soit nettoyer à la fin de l'exécution de tous les tests
- Ou à la fin de chaque test
JUNIT 4 @Before
class MyFirstTest {
// Fixture
Calcul calcul;
@Before
public void beforeEach() {
calcul = new Calcul();
}
@Test
public void testAddition() {
int res = calcul.add(2,4);
../
}
@After
public void tearDown() {
calcul = null
}
}
JUNIT 4 @BeforeClass
class MyFirstTest {
// Fixture
static Calcul calcul;
@BeforeClass
public static void beforeEach() {
calcul = new Calcul();
}
@Test
public void testAddition() {
int res = calcul.add(2,4);
../
}
@AfterClass
public static void tearDown() {
calcul = null
}
}
JUNIT 5
class MyFirstTest {
// Fixture
Calcul calcul;
@BeforeEach
public void beforeEach() {
calcul = new Calcul();
}
@Test
public void testAddition() {
int res = calcul.add(2,4);
../
}
@AfterEach
void tearDown() {
calcul = null
}
}
JUNIT 5 @BeforeClass
class MyFirstTest {
// Fixture
static Calcul calcul;
@BeforeAll
public static void beforeEach() {
calcul = new Calcul();
}
@Test
public void testAddition() {
int res = calcul.add(2,4);
../
}
@AfterAll
public static void tearDown() {
calcul = null
}
}