Test-Driven Development

Pourquoi ?

L'approche T.D.D. (Test-Driven Development) consiste à implémenter les tests en premier.

Cela offre les avantages suivants :

  • Lors de l'implĂ©mentation du test, on se concentre sur la fonctionnalitĂ© et son utilisation plutĂŽt que sur les contraintes liĂ©es Ă  son dĂ©veloppement. Autrement dit, on se concentre sur ce que l'on veut faire plutĂŽt que sur ce que l'on peut faire. Cela Ă©vite par exemple l'utilisation de librairies inadaptĂ©es.

  • Le T.D.D. encourage naturellement l'adoption d'architectures simples, modulaires et dĂ©couplĂ©es afin de simplifier l'implĂ©mentation des tests. On obtient alors une meilleure architecture et un code moins monolithique et plus facile Ă  maintenir.

  • Les interfaces peuvent ĂȘtre gĂ©nĂ©rĂ©es Ă  partir des tests.

  • Quand les tests passent, on sait que la fonctionnalitĂ© est opĂ©rationnelle.

  • Le dĂ©veloppement est plus rapide car la vĂ©rification des rĂ©sultats est instantanĂ©e et automatique.

Le "Test-Driven Development" Etape par Etape

1. Définition du Test

Grùce à la fonction xit de Jasmine, on peut décrire une "spec" et l'exclure tant que la fonctionnalité n'est pas implémentée.

describe('Calculator', () => {

    xit('should evaluate 2 + 3 + 4 to 9', () => {
        // @TODO implement this.
    });

});

Ce code peut ĂȘtre "commit" et "released".

Skipped Test

2. Implémentation du Test

Un test dĂ©sactivĂ© sera tout de mĂȘme compilĂ© par TypeScript.

Grùce à l'IDE, on peut générer les classes et fonctions sans les implémenter.

Create Class
Generate Method

Ce code peut ĂȘtre "commit" et "released".

Par précaution, vous pouvez toujours ajouter une annotation @deprecated: Work in progress dans les commentaires de la méthode.

3. Implémentation de la Fonctionnalité

Avant d'implémenter la fonctionnalité, il faut lancer les tests unitaires et effectuer les modifications progressivement jusqu'à ce que tous les tests passent.

Le code en cours de dĂ©veloppement peut Ă©galement ĂȘtre "commit" et "released" Ă  condition de dĂ©sactiver les tests associĂ©s aux fonctionnalitĂ©s en cours de dĂ©veloppement et de ne pas impacter les tests existants.

Mis Ă  jour