Module de Programmation Android (LP PRISM AirFrance)
TD10 - Test unitaires
L'objectif de ce TD est la mise en place de tests unitaires simples
permettant de tester des propriétés d'une application :
- au niveau des valeurs affichées ;
- en réaction à une action de l'utilisateur.
Pour cela, nous allons repartir du TD8, et vérifier quelques propriétés
du jeu Click the Buttonᵀᴹ.
Mise en place
Reprenez votre TD8, ou téléchargez
le corrigé. Par la suite, nous supposerons
que le paquet Java a pour nom fr.lri.keller.td8correction
et que la classe de l'activité a pour nom TD8Activity
;
adaptez les noms si vous utilisez votre propre version du TD8.
Tests unitaires sur l'activité
Observer le fichier ApplicationTest
contenu dans le
répertoire app/java/fr.lri.keller.td8correction
(androidTest)
. Il permet de créer des tests unitaires à l'échelle
de l'application toute entière : nous allons faire quelque chose de
similaire, mais à l'échelle de l'activité.
Faire un clic droit sur le
répertoire app/java/fr.lri.keller.td8correction
(androidTest)
et choisir New/Java Class
. L'appeler
du nom de votre activité en ajoutant Test
à la fin, comme
par exemple TD8ActivityTest
.
Faire hériter cette classe
de ActivityInstrumentationTestCase2<TD8Activity>
.
Vous devez alors ajouter un constructeur : définir un constructeur ne
prenant par d'argument et faisant un appel au constructeur de la
super-classe avec comme argument TD8Activity.class
.
Ajouter un test unitaire trivial, comme par exemple :
public void testTrivial() {
assertEquals(42,42);
}
Pour lancer ce test, faire un clic droit
sur TD8ActivityTest
dans l'arborescence et
choisir Run 'TD8ActivityTest'
.
Ajouter également un test faux, et regarder quelle est l'erreur affichée
dans AndroidStudio. Le retirer ensuite.
Récupération de l'activité et des objets de son interface
Nous allons vouloir observer les valeurs des zones de texte contenant le
score et le niveau. Nous allons pour cela, au lancement des tests,
accéder à l'activité et ainsi à ses zones de texte.
Définir dans la classe TD8ActivityTest
trois champs non
initialisés: un de type TD8Activity
, destiné à recevoir
l'activité, et deux de type TextView
, destinés à recevoir
les deux zones de texte.
Surcharger la
méthode setUp
de la
classe ActivityInstrumentationTestCase2
,
en précisant qu'elle peut renvoyer une exception Java. Dans le corps de
cette méthode :
- Effectuer un appel à la méthode de la super-classe.
- Initialiser
le champ de type
TD8Activity
.
- À l'aide de ce champ, initialiser les deux autres champs.
Préconditions des tests
Avant de manipuler ces objets dans les tests que l'on souhaite
effectuer, il est préférable de s'assurer qu'ils ont bien été
initialisés : cela permet de détecter tout de suite les erreurs
introduites au niveau du test, évitant ainsi de polluer la recherche des
erreurs introduites au niveau du code principal.
Avant tout autre test, définir une méthode de test public void
testPreconditions()
s'assurant
que les deux champs de type TextView
sont bien
initialisés.
Enfin un test utile !
Définir une méthode de test
s'assurant
que l'entier contenu dans l'affichage du niveau est toujours égal au
cinquième du score plus 1.
Rappel : les méthodes de test doivent obligatoirement être publiques,
renvoyer void
, ne pas prendre d'argument, et leur nom doit
commencer par test
.
Lancer les tests.
Simuler une action de l'utilisateur
On veut vérifier que l'affichage du score est bien incrémenté à chaque
clic sur le bouton.
Récupérer le bouton dans un champ de la
classe TD8ActivityTest
lors de la
méthode setUp
.
Pour pouvoir simuler des actions de l'utilisateur, il faut les autoriser
explicitement : dans le corps de setUp
, ajouter un appel
à setActivityInitialTouchMode(true)
avant
l'appel à getActivity()
.
Définir une méthode de test correspondant la vérification que l'on
souhaite faire dans cette partie. Dans le corps de cette méthode :
- Récupérer la valeur du score avant le clic.
- Simuler
un clic sur le bouton.
- Récupérer la valeur du score après le clic.
- S'assurer de la propriété voulue.
Lancer les tests. Regarder le comportement de la tablette ou de
l'émulateur pendant les tests.
À vous de jouer
- Vérifier que le score est toujours un entier positif.
- Vérifier que le niveau est toujours un entier strictement
positif.
- Vérifier que le niveau est incrémenté de 1 après 5 clics sur le
bouton.
- Utiliser le score pour déterminer le nombre minimal de clics à
effectuer sur le bouton pour que le niveau augmente de 1, et le
tester.
Pour aller plus loin
Définir des tests unitaires pour d'autres TDs.
Retour à la page du cours |