23
Les Tests Unitaires Anthony Médassi

Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les Tests Unitaires

An

tho

ny

Méd

assi

Page 2: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Introduction But : La qualité

Du responsable du projet au client: Tous inclus dans le processus de validation

Plus il y a de tests, meilleure est la qualité finale du produit

Les tests ont un coût non négligeable dans un projet

Trouver le juste équilibre entre:

La qualité que l’on souhaite obtenir

L’investissement nécessaire

Page 3: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Quand tester? Dépend du type de test

Le développeur teste au fur et à mesure grâce aux tests unitaires

Le testeur fonctionnel teste le plus tôt possible :

Application utilisable le plus rapidement possible

À éviter:

Tester une fois le développement terminé

Corriger au plus vite pour présenter quelques fonctionnalités au client (Agilité)

Eviter l’effet tunnel

Lire le Glandeur naturel et le faiseur de miracle

Page 4: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les différents types de tests Les tests unitaires

Les tests d’intégration

Les tests fonctionnels

Page 5: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les tests unitaires Les plus basiques

Ils apparaissent en 1er car liés à l’écriture du code

Le principe :

Permet la validation de code qui vient d’être écrit

Constitue un garde fou pour les modifications futures de ce code

Chaque modification apporte ses propres tests

+ Exécution des anciens tests afin de vérifier que le nouveau code ne modifie pas le comportement antérieur

Page 6: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les tests d’intégration Vérifie que l’intégration de fonctions soit

opérationnelle, sans anomalie

Nécessite une application déployée et opérationnelle

Permet de valider des enchaînements d’actions valides

Évolution vers l’intégration continue:

Vérification à chaque modification de code de la non-régression:

Cruise Control

Jenkins

Impose une utilisation de versioning

Page 7: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les tests fonctionnels Permet de valider une fonctionnalité de l’application

du point de vue de l’utilisateur

Tests effectués le plus souvent manuellement par un testeur

Valide les besoins utilisateurs

Page 8: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Mise en place de tests unitaires Le code d’abord:

Une fois méthode développée, mise en place de tests associés

Le test d’abord:

On écrit d’abord les tests qui valideront des comportements que l’on développera plus tard

Méthode TDD : Test Driven Development

Page 9: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Outils pour tests unitaires Des Framework existent dans la plupart des langages

xUnit avec x initial du langage:

Le premier pour SmallTalk : sUnit

cppUnit pour C++

cUnit pour le langage C

jsUnit pour Javascript

nUnit pour .NET

jUnit pour Java (intégré à Netbeans)

phpUnit pour PHP

…etc

Page 10: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Exemple Calculatrice Créer une classe Opération

Puis définir une méthode static addition et multiplication

Page 11: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Exemple Calculatrice Clic droit sur la classe puis :

Tools

Create Tests

Page 12: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Exemple Calculatrice La classe OperationsTest est créée

Elle contient les méthodes de test de chaque méthode de Operation

Page 13: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Exemple Calculatrice Modification de la méthode de test

Page 14: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Exemple Calculatrice Lancement des tests unitaires : clic droit sur la classe,

puis Test File.

Page 15: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Exemple Calculatrice Création du 2ème test, puis réexécution :

Page 16: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Bonnes pratiques Définir une classe de test par entité métier à valider

Méthodes de la classe de test doivent respecter un nommage précis, par exemple:

testNomMethodeATester

Précédé de @Test

Page 17: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les annotations 1/2 @Test : c’est une méthode de test

@Before : exécutée avant chaque test. Prépare l’environnement du test

@After: exécutée après chaque test: nettoyage de l’environnement

@BeforeClass: exécutée 1 seule fois avant l’exécution de la classe de test:

Ex: Connexion BD

Page 18: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les annotations 2/2 @AfterClass: exécutée 1 seule fois après que tous les tests

aient été exécutés

@Ignore: Ignore la méthode de test

@Test (expected = Exception.class):

Échoue si la méthode ne lève pas l’exception en question

@Test (timeout=100):

Échoue si la méthode met plus de 100ms à s’exécuter

Page 19: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les assertions 1/2 assertsEquals([String message], expected, actual)

Teste si les 2 valeurs expected et actual sont égales.

Pour un tableau, teste la référence et non les valeurs

assertsEquals([String message], expected, actual, tolerance)

Teste si les valeurs correspondent avec une tolérance

La tolérance correspond au nombre de décimal identiques

fail(String)

Fait échouer la méthode de test

Page 20: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Les assertions 2/2 assertTrue(true) / assertTrue(false)

Fait échouer ou réussir un test

assertTrue([message], boolean condition) Teste le booléen

assertNull([message], object) Teste si l’objet est null

assertNotNull([message], object) Teste si l’objet n’est pas null

assertSame([String], expected, actual) Teste si les 2 variables font référence aux 2 mêmes objets

assertNotSame([String], expected, actual) Vérifie que les 2 variables font référence à 2 objets différents

Page 21: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Mock Objet qui simule un comportement

Objet fantaisie, Objet factice

Il peut être utilisé pour remplacer:

Un comportement non déterministe (Heure,T°)

Des états difficiles à reproduire (erreur réseau)

Initialisation longue (BD)

Objet qui n’existe pas encore

Doit avoir la même interface que l’objet qu’il simule

Cf. Outil EasyMock

Page 22: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

Exercices Créer une classe Etudiant

Les attributs:

Son nom

Son prénom

Ses notes en Slam3 Slam4 et Slam5

Les méthodes:

1 pour calculer la moyenne

1 pour calculer l’écart entre la moyenne et 10

1 pour afficher le nom complet (Ex: Anthony Médassi)

Écrire la classe de test.

Page 23: Les Tests Unitairesanthony.medassi.free.fr/upload/SLAM4/Cours/01-TestsUnit... · 2019-09-23 · Les tests unitaires Les plus basiques Ils apparaissent en 1er car liés à l’écriture

FIN Questions