Développement piloté par les tests

Introduction aux tests en Java

Maria Milusheva

Senior Software Engineer

Test-Driven Development

Jusqu'ici, nous n'avons écrit des tests qu'après le code de production.

  • Le Test-Driven Development (TDD) est une technique où les tests guident la conception
  • En TDD, on écrit les tests avant tout code de production

  • Pourquoi faire du TDD ?

Introduction aux tests en Java

Avantages du TDD

  • Avec le TDD, on répond mieux aux exigences du projet
  • Vérification immédiate : tout code écrit a déjà des tests
  • Coder à partir des tests produit un code plus clair et mieux structuré
Introduction aux tests en Java

Les lois du TDD

1. Écrire un test en échec avant tout code de production

2. Écrire le test le plus court possible

3. Ne pas écrire plus de code de production que nécessaire pour faire passer le test

Appliquer ces étapes dans l'ordre = un cycle de TDD

Le développement progresse par cycles répétés de TDD

1 https://blog.cleancoder.com/uncle-bob/2014/12/17/TheCyclesOfTDD.html
Introduction aux tests en Java

Tester les palindromes

  • Supposons que nous voulions écrire une méthode qui vérifie si un entier est un palindrome

  • Exemples d'entiers palindromes : 12321, 0, 3333

Introduction aux tests en Java

Écrire un test en échec avant tout code

@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
    int number = 1234;

    assertFalse(isPalindrome(number)); // isPalindrome() n'est pas encore écrite
}

Un test est comme un mémo pour nos « nous » futurs, rappelant les exigences du projet.

Introduction aux tests en Java

Écrire le minimum pour faire passer le test

public boolean isPalindrome(int num) {
    return false; // Écrire le code minimal pour satisfaire le test.
}

Le test passe. On peut lancer le cycle de TDD suivant.

Introduction aux tests en Java

Écrire un autre test

Nouveau test – nouvelle exigence pour la fonctionnalité :

@Test
public void isPalindrome_PalindromicInt_ReturnsTrue() {
    int number = 1234321; // Écrire maintenant un cas de test plus complexe.

    assertTrue(isPalindrome(number)); // À ce stade, isPalindrome() va échouer.
}
Introduction aux tests en Java

Implement the method

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;
        // Une fois le dernier chiffre traité, le supprimer avec / 10.
        num = num / 10;
    }
    return inverted;
}
Introduction aux tests en Java

Corriger un bug avec le TDD

Le TDD est excellent pour corriger les bugs !

La méthode que nous venons d'écrire renvoie true pour number = -121. Ce n'est pas correct !

Nous écrivons un test unitaire pour illustrer le bug :

@Test
public void isPalindrome_NegativeNumber_ReturnsFalse() {
    int number = -121; // Pas un palindrome, car -121 n'est pas égal à 121-.

    assertFalse(isPalindrome(number));
}
Introduction aux tests en Java

Corriger un bug avec le TDD

public boolean isPalindrome(int num) {
    if (num < 0) { 
        return false; // Ajouter une clause pour renvoyer 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

Passons à la pratique !

Introduction aux tests en Java

Preparing Video For Download...