Un test unitaire permet de tester le bon fonctionnement d'une partie précise d'un programme. Il permet de s'assurer que le comportement d'une application est correct. Imaginez une application mobile qui vous permette de gérer un porte-monnaie virtuel. Vous testeriez si l'euro que vous mettez dedans est bien comptabilisé. Vous testeriez également si vous pouvez récupérer l'argent qui s'y trouve.
L'avantage d'un test unitaire est donc multiple :
Il vous permet d'avoir un retour rapide sur votre développement. Si le test échoue, vous pouvez rapidement corriger votre code pendant que tout est frais dans votre esprit.
Il vous permet d'avoir un filet de sécurité. Si vous cassez quelque chose, vous vous en apercevez tout de suite.
Il vous permet d'éviter d'accumuler de la dette technique, en ayant une application qui soit facilement maintenable et évolutive.
Découvrez les différentes catégories de test
Les tests peuvent être regroupés sous trois catégories différentes :
les tests unitaires, qui doivent être petits, rapides et très ciblés. Ils permettent de détecter les erreurs au plus tôt. La majorité des composants sont simulés, ce qui implique qu'ils ne représentent pas forcément la réalité. Ils ont l'avantage de pouvoir s'exécuter sur l'ordinateur du développeur, ce qui permet de les passer très rapidement ;
les tests d'intégration, qui permettent de tester plusieurs composants. Certains sont simulés, d'autres sont réels. Ils peuvent s'exécuter sur l'émulateur ou sur un équipement réel. Ils sont plus longs à écrire, mais sont beaucoup plus fidèles que les tests unitaires ;
les tests d'interface, qui permettent de tester une application comme un vrai utilisateur. Ces tests ont l'avantage d'être extrêmement fidèles à la réalité, mais ce sont les plus longs et les plus compliqués à écrire.
L'idéal consiste à écrire des tests de chaque catégorie. La recommandation est la suivante :
70 % de tests unitaires ;
20 % de tests d'intégration ;
10 % de tests d'interface.
Dans ce cours, nous allons principalement écrire des tests unitaires et quelques tests d'intégration. Cela sera suffisant pour démarrer. Car vous le verrez, écrire des tests n'a rien de passionnant. Donc autant avancer doucement.
Découvrez les différents tests sur Android
Sur Android, les tests peuvent être de deux natures différentes :
Les tests unitaires locaux (ou Local Unit Tests). Ce sont des tests unitaires qui sont exécutés sur la JVM de votre ordinateur. Sachant qu'il n'existe pas de dépendance avec Android, il n'est pas nécessaire de démarrer l'émulateur ou d'accéder à un équipement réel. Ces tests sont donc déroulés très rapidement.
Les tests unitaires instrumentalisés (ou Instrumented Unit Tests). Ce sont des tests unitaires qui ont besoin du système Android pour fonctionner (car ils utilisent ses API). Le lancement de l'émulateur ou le branchement d'un équipement réel est nécessaire pour pouvoir exécuter ces tests. Ils sont donc plus longs à dérouler.
L'approche TDD
Pour écrire vos tests unitaires, je vous conseille d’adopter l’approche TDD, pourTest-Driven-Development. La règle est assez simple : vous commencez par écrire les tests qui permettent de valider les différentes exigences de votre application. Ensuite, vous écrivez le code de votre application qui permet de valider ces tests.
Cette méthode vous évite d'écrire trop de code : la base de code est plus saine et moins sujette aux erreurs. Cependant, il n'est pas toujours évident d'avoir cette approche avec des tests d'interface ou lorsqu'une connectivité réseau est présente, car les paramètres qui rentrent en compte sont multiples.
Pour faire simple, cette approche est intéressante pour tester son modèle, et c'est ce que nous allons voir dans les prochains chapitres !
En résumé
Les tests unitaires sont utiles pour tester une partie spécifique de notre application.
Il existe différentes catégories de tests en fonction de la précision et du champ d’action des tests (Unitaires, Intégration, Interface).
Sur Android, il existe 2 types de tests : les tests unitaires locaux, qui n’ont aucune dépendance avec Android, et les tests unitaires instrumentalisés qui utilisent les API d’Android et nécessitent un équipement (réel ou virtuel) pour être exécutés.
Maintenant que vous êtes familier avec les tests unitaires, découvrez dans le chapitre suivant comment lancer votre premier test. 🚀