Introduction aux tests en Java
Maria Milusheva
Senior Software Engineer
Jusqu'ici, nous n'avons écrit des tests qu'après le code de production.
En TDD, on écrit les tests avant tout code de production
Pourquoi faire du TDD ?
1. Écrire un test en échec avant tout code de production
2. Écrire le test le plus court possible
3. N'écrire que le code de production suffisant pour faire réussir le test
Appliquer ces étapes = un cycle de TDD
Le développement progresse par cycles répétés de TDD
Supposons que nous voulions écrire une méthode qui vérifie si un entier est un palindrome
Exemples d'entiers palindromes : 12321, 0, 3333
@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
int number = 1234;
assertFalse(isPalindrome(number)); // isPalindrome() n'est pas encore écrite
}
Un test est comme un rappel laissé à notre futur nous des exigences du projet.
public boolean isPalindrome(int num) {
return false; // Écrire le minimum pour satisfaire le test.
}
Le test réussit maintenant. Passons au cycle de TDD suivant.
Nouveau test – nouvelle exigence pour la fonction :
@Test
public void isPalindrome_PalindromicInt_ReturnsTrue() {
int number = 1234321; // Cas de test plus complexe.
assertTrue(isPalindrome(number)); // À ce stade, isPalindrome() échouera.
}
public boolean isPalindrome(int num) {
int inverted = 0;
while (num != 0) {
// À chaque itération, prendre le dernier chiffre avec % 10
// et l'ajouter à inverted * 10.
inverted = inverted * 10 + num % 10;
// Comme le dernier chiffre est traité, l'éliminer avec / 10.
num = num / 10;
}
return inverted;
}
Le TDD est excellent pour corriger les bogues !
La méthode que nous venons d'écrire retourne true pour number = -121. Ce n'est pas correct !
Nous écrivons un test unitaire pour illustrer le bogue :
@Test
public void isPalindrome_NegativeNumber_ReturnsFalse() {
int number = -121; // Pas un palindrome, car -121 n'est pas égal à 121-.
assertFalse(isPalindrome(number));
}
public boolean isPalindrome(int num) {
if (num < 0) {
return false; // Ajouter une clause pour retourner false pour les valeurs négatives.
}
int inverted = 0;
while (num != 0) {
inverted = inverted * 10 + num % 10;
num = num / 10;
}
return inverted;
}
Introduction aux tests en Java