Licence 3 Informatique – Génie Logiciel
TP2 : Gradle & Mock & Test Unitaires
Objectifs
ü Savoir configurer Eclipse pour mettre en œuvre Gradle ü Utiliser des Mocks dans le cadre de tests unitaires
Exercice 1 : Mise en place de Gradle Dans cet exercice nous allons utiliser Gradle pour construire notre projet. Pour cela vous aurez besoin du plugin Buildship d’Eclipse. Ce plugin est normalement installé dans les salles de TP. Si vous souhaitez travailler sur votre machine, et qu’il n’est pas présent dans votre installation, vous pouvez le télécharger depuis le « market place » d’Eclipse.
Si Buildship est correctement installé, vous pouvez maintenant créer un projet Gradle dans Eclipse (Nouveau Projet -> Projet Gradle)
Consignes
ü Créez un nouveau projet Gradle ü Repérez les fichiers build.gradle et settings.gradle qui servent à configurer les
projets Gradle
Exercice 2 : Utilisation de Gradle pour la mise en place des outils Vous aurez besoin pour ce projet de Mockito pour la partie Mock. Pour cela, nous allons récupérer la librairie grâce à Gradle.
Consignes
ü Modifiez le fichier build.gradle pour ajouter la bibliothèque Mockito 2.x. Pour cela
o Ajoutez jcenter()dans la partie repositories {…} o Ajoutez testCompile "org.mockito:mockito-core:2.+" dans la partie
dependencies{…}
ü Exécutez le script gradle en faisant un clic droit sur votre projet et en sélectionnant
Publicité
dans le menu contextuel Gradle -> Refresh Gradle Project
Exercice 3 : Jeu de Dés (adapté d’un sujet de Sébastien Mosser) Dans cet exercice nous allons essayer de réaliser un jeu de dés relativement simple. L’objectif est de manipuler des doublures d’objets dans le cadre de tests unitaires.
Spécifications
ü Le dé a 6 faces et retourne un entier aléatoire entre 1 et 6 lorsqu’il est lancé.
Génie Logiciel
Licence 3 Informatique – Génie Logiciel
ü Le résultat d’un lancé de dé est associé à un Joueur qui est caractérisé par un nom et qui fourni la valeur de son dé. Par défaut (avant de lancer), la valeur du dé du joueur est fixée à -1 (Remarque : cette solution bien que générique n’est pas très élégante, il vaut mieux utiliser le type Optional introduit en Java 8 par exemple).
ü Le Joueur lance deux fois le dé et garde la valeur maximum. ü Lors d’un jeu de dé, deux joueurs s’affrontent et le joueur qui a le plus grand tirage gagne. Si les deux joueurs sont ex-aequo, ils recommencent. Si au bout de 5 essais ils sont toujours ex-aequo, il n’y a pas de vainqueur.
1. Le dé et son Test
Consignes
ü Ecrivez le test pour vérifier le comportement du dé. Vous devrez vous assurer que les tirages sont bien entre 1 et 6 (sinon une erreur de type RunTimeException est renvoyée mais nous le traiterons un peu plus loin).
ü Ecrivez également la classe Dé qui prendra en paramètre du constructeur un objet de type Random. Cela permet d’assurer la reproductibilité des tirages et cela va également nous permettre de tester l’exception. La classe Dé possède une seule méthode : public int lancer() ;
ü Ecrivez dans votre fichier de test une classe NoRandom qui hérite de Random et qui surcharge la méthode public int nextInt(int m) pour qu’elle renvoie toujours 7 ; ü Ecrivez un test permettant de vérifier que l’exception est bien levée lorsque l’on utilise
un objet NoRandom.
ü Modifiez maintenant votre test pour vérifier le comportement lorsque la valeur est
Publicité
inférieure à 1.
2. Amélioration des tests du dé avec Mockito
Pour l’instant nous ne nous somme toujours pas servi de Mockito. Cependant, l’écriture de la classe NoRandom est une solution de doublure. En effet, la classe nous permet de changer le comportement de la classe Random pour effectuer des tests spécifiques. Mockito va nous permettre de simplifier tout ça. En effet, écrire une nouvelle classe pour chaque classe à tester est relativement contraignant et tout déclarer dans la classe de test n’est pas crédible.
Consignes
ü Créez un mock permettant de reproduire le comportement de la classe Random et surchargez sa méthode nextInt(…) pour lui faire retourner la valeur dont vous avez besoin.
o Exemple pour tester une valeur supérieure à 6 :
Random tooMuch = mock(Random.class); when(tooMuch.nextInt(anyInt())).thenReturn(7);
3. Le joueur et son test
Consignes
ü Ecrivez le test permettant de vérifier le lancer d’un joueur. ü Ecrivez la classe Joueur pour passer votre test. Le constructeur du Joueur prendra en
paramètre le nom du joueur et le dé qu’il va utiliser
Génie Logiciel
Licence 3 Informatique – Génie Logiciel
ü Modifiez la classe Joueur pour garder le meilleur de deux lancés
Grâce aux objets de doublure il va être possible de tester que le joueur ne triche pas et qu’il ne lance pas le dé plusieurs fois. Pour cela nous allons créer un Mock qui va prendre la place du dé et compter le nombre de fois où l’on va utiliser la méthode lancer
Publicité
ü Modifiez votre test pour vérifier le nombre de lancés grâce au code suivant :
Dice mockDe = mock(Dice.class); … verify(mockDe, times(2)).lancer();
Sur le même principe, donnez une solution pour vérifier que le joueur conserve bien le maximum de deux tirages.
4. Le jeu de dé
Consignes
ü Ecrivez la classe de test permettant de la classe JeuDeDé qui va mettre aux prises deux
joueurs.
o Utilisez des mocks pour contrôler le gagnant et pouvoir faire votre test que le
vainqueur est bien correct
o Utiliser des mocks pour vérifier que le cas où il n’y a pas de gagnant est bien
traité
ü Ecrivez la classe de JeuDedé
Génie Logiciel