:: Enseignements :: Master :: M1 :: 2017-2018 :: Programmation Orientée Objet - Design Patterns ::
[LOGO]

JUnit et tests




Exercice 1 - Liste de course

Un de vos collègues a commencé à coder une application permettant de gérer une liste de courses mais n'a pas fini et il est maintenant affecté à un autre projet et c'est à vous de reprendre le code.
Le code est constitué de 2 classes, une classe Fruit qui correspond à un fruit avec son nom et son prix et une classe GroceryList qui correspond à une liste de courses faites par une personne indiquant les fruits (avec leur quantité) que celle-ci souhaite acheter.

Pour tout test, votre collègue vous a envoyé un splendide main.

Le but de cet exercice est de créer des tests unitaires automatisables sur le code existant puis de faire évoluer le code et les tests de concert (voir même de trouver des bugs puisque c'est ce à quoi servent les tests, non ?).

  1. Pour commencer, nous allons écrire les tests unitaires pour la classe Fruit, le lien suivant vous indique comment écrire un test au format JUnit 4 (Getting-started).
    Ecrire les tests pour les méthodes getName, getPrice.
  2. Ajouter les tests pour les méthodes hashCode et equals.
    Pour avoir une idée de ce qui doit être testé, aller voir la javadoc de ces méthodes est une bonne idée.
  3. Tester qu'un code marche correctement est une bonne idée, mais ce n'est pas le seul type de test, il faut aussi tester ce qu'il se passe si on n'envoie pas les bonnes valeurs.
    Que se passe t'il si on crée un Fruit ayant null comme nom et que l'on utilise equals ?
    Est-ce le comportemant attendu de la classe ? (rappelez-vous de l'adage "blow early, blow often").
  4. Modifier le code pour éviter le problème de la question précédente et écrivez un test validant le nouveau comportement.
    Comment tester la levée d'une exception avec JUnit 4.
  5. Ecrivez les tests pour la classe GroceryList, exactement pour le constructeur et les méthodes addOrder, getQuantityOfFruit et price.
    Note: il y a 6 bugs à trouver ! et il vous faudra peut-être aussi modifier la classe Fruit.
La suite ?
CR du TD B et étudiez aussi les articles suivants :