Objectifs
- Mettre en pratique le Test Driven Development (TDD)
L'objectif de cette démonstration est de vous initier au TDD à l'aide de JUnit. Vous implémenterez un peu de logique d'affaire après avoir écrit les tests unitaires associés.
Étapes classiques du TDD :
- Rédiger un test unitaire pour une fonctionnalité qui n'existe pas.
- Faire une implémentation dans le but de faire compiler le test et de le faire échouer.
- Rédiger une première vraie implémentation de la fonctionnalité, sans se préoccuper de la qualité du code ou du design. À ce moment, le test unitaire rédigé doit passer.
- Faire du refactoring jusqu'à l'obtention d'un design satisfaisant.
Commencez par récupérer le projet GitHub suivant INF2015-TDD .
La classe Membre représente un membre du centre sportif. On y stocke son nom, prénom et sa date d'inscription. Nous voulons une fonctionnalité qui permet d'obtenir le numéro d'un membre.
REMARQUE : Le numéro d'un membre est composé des trois premières lettres de son nom de famille suivi de la première lettre de son prénom (tout ça en majuscule), suivi de sa date d'inscription (en format AAMMJJ).
Exemple: Pour le membre Hugo Scurti, inscrit le 04 mars 2012, son numéro de membre est SCUH120304.
- Dans la classe MembreTest, nous créerons un test pour cette fonctionnalité. Appelons ce test testObtenirNumeroMembre().
- Vous devez implémenter ce test en appelant une fonction de Membre qui n'existe pas encore. Il est donc normal qu'il y ait une erreur dans le test à ce moment-ci.
- Comme nous devrons instancier des dates, je vous ai mis dans la classe de test un objet SimpleDateFormat qui vous sera utile pour les tests de la classe Membre.
- Dans la classe Membre, écrivez la fonction ObtenirNumeroMembre() et faite-la retourner une valeur qui fera échouer le test (par exemple, retourner une chaîne vide).
- Vérifiez que le test échoue réellement.
- Implémentez pour vrai la fonction ObtenirNumeroMembre() pour que le test réussisse.
- Refactorez la fonctionnalité jusqu'à temps que vous êtes satisfait du design!
- Dans le cas de la fonction ObtenirNumeroMembre(), une possibilité de refactoring serrait de calculer la valeur du numéro de membre lors de l'instanciation et de la stocker dans une variable, puis simplement retourner la valeur stocké lors de l'appel de la fonction.
C'est à votre tour d'implémenter la fonctionnalités suivante (en utilisant la méthode TDD, bien sûr!) :
Obtenir le nombre d'années que le membre est inscrit au centre sportif.
Cette fonctionnalité permet de calculer le nombre d'années que le membre est inscrit au centre sportif. Par exemple, pour un membre qui est inscrit depuis le 12 mars 2013, ce fera un an qu'il est inscrit à partir du 12 mars 2014 (un peu comme on calcule l'âge de quelqu'un en fonction de sa date de naissance).
- Allez-y avec les mêmes étapes qu'à l'exercice 1.
- Conseil : pour comparer des dates, vous pouvez vous instancier deux Objets Calendar (à l'aide de la fonction Calendar.getInstance()), puis comparer les années, les mois et les jours de chacun.
On désire implémenter des fonctionnalités à la classe Cours. Cette classe représente un cours qui se donne au centre sportif (Par exemple, du Yoga). Familiarisez-vous d'abord avec le code.
Ensuite, on désire implémenter les fonctionnalités suivantes :
- Ajouter un membre au cours
- Calculer le nombre de places restantes pour le cours
- Calculer la moyenne d'ancienneté des membres inscrits au cours
- Vérifier si un membre est inscrit au cours
Comme aux exercices précédents, utilisez le TDD pour implémenter chaque fonctionnalité.