TEST UNITAIRE
ISEN Dev’
SOMMAIRE
•
•
•
•
•
•
•
•
•
•
•
•

Qu’est ce qu’un test ?
Définition
Quelques règles
Avantage et intérêt
Outil de test
Cas à tester
Les résultats
Test Driven Development
Mock
Convention nommage
Utilisation Junit
Conclusion

1
QU’EST CE QU’UN TEST ?
Un test est un ensemble de cas à tester
éventuellement accompagné d'une procédure
d'exécution. Il est lié à un objectif.
Source : IEE

2
QU’EST CE QU’UN TEST ?
Il existe différents niveaux de test :

Test unitaire
 Test d’intégration
 Test de charge
 Test fonctionnel
 Test sécurité
 ….


3
TEST UNITAIRE : DÉFINITION
Un test unitaire est une procédure permettant de
vérifier le bon fonctionnement d'une partie
précise d'un logiciel. Il s’agit d’un code.
En POO  on teste au niveau des classes
Pour chaque classe on a une classe de test.

4
TEST UNITAIRE : QUELQUES RÈGLES








Doit être isolé : il doit être indépendant
N’est pas un test de bout en bout : il agit que sur
une portion de code

Doit être déterministe : le résultat doit être le
même pour les mêmes entrées

Est le plus petit et simple possible
5
TEST UNITAIRE : QUELQUES RÈGLES










Ne teste pas d'enchainement d’action
Etre lancé le plus souvent possible : intégration
continue

Etre lancé le plus tôt possible : détection des bug
plus rapide
Couvrir le plus de code possible
Etre lancé a chaque modification

6
TEST UNITAIRE : AVANTAGE ET
INTÉRÊT

Garantie la non régression
 Détection de bug plus facile
 Aide a isoler les fonctions
 Aide a voir l’avancement d’un projet (TDD)


7
TEST UNITAIRE : OUTIL DE TEST

PHP

JS

SQL

JAVA

PHPUnit
SimpleTest1

JSUnit

SQLUnit

JUnit

1 : Fonctionnement similaire a JUnit

8
TEST UNITAIRE : CAS A TESTER
Lors de l’utilisation de test unitaire on se doit de
tester différents cas.
Cas en succès : fonctionnement normal
 Cas d’erreur : test sur la gestion d’erreur
 Cas aux limites : test de la robustesse


9
TEST UNITAIRE : LES RÉSULTATS
Un test unitaire peux renvoyer 4 résultats
différents :
Success : test réussi
 Error : erreur inattendue a l’exécution
 Failure : au moins une assertion est fausse
 Incomplete / skipped ( à éviter)


10
TEST UNITAIRE : TDD
On peut piloter un projet par les test (Test Driven
Development). On voit l’avancement du projet par
l’avancement des test validés.
Pour cela on réalise les test avant le code.
A ce moment le test échoue, on implémente le code
et pour qu’il se valide.
Rédaction des
tests 1 et 2

Code pour faire
valider le test 2

Code pour faire
valider le test 1

11
TEST UNITAIRE : MOCK
Quelques fois un test a besoin d’un composant pour
s’exécuter.
Par exemple pour tester le parseur XML il faut du
XML et dans l’application le XML provient
d’internet. Il est alors utile d’utiliser des bouchons
(MOCK) pour isoler le test.

De plus un bouchon permet de tester tout les cas
(valeur correcte, erroné etc.)
12
TEST UNITAIRE : CONVENTION NOMMAGE
Il est recommandé d’utiliser une même convention
de nommage pour tout les test unitaire. Par
exemple

test[nomMethode][cas][resultat/comportementAttendu]();
Préfixe
souvent imposé
13
TEST UNITAIRE : UTILISATION DE JUNIT
Il n'y a pas de limite au nombre de tests au sein de notre classe
de test.

On écris au moins un test par méthode de la classe testée.
Pour désigner une méthode comme un test, il suffit d’utiliser
l'annotation @Test (a partir de JUnit4).

14
TEST UNITAIRE : UTILISATION DE JUNIT
Au sein des tests on utilise des assertions pour valider ou non un
test. Quelques assertions indispensable :
Assertion

Action

assertEquals()

Vérifie l’egalité entre deux entités

assertNotEquals()

Vérifie l’inégalité entre deux entités

assertFalse()

Vérifie que la valeur fourni en
paramètre est fausse

assertTrue()

Vérifie que la valeur fourni en
paramètre est vrai

assertNull()

Vérifie que la valeur fourni en
paramètre est l’objet NULL

assertNotNull()

Vérifie que la valeur fourni en
paramètre n’est pas l’objet NULL

15
TEST UNITAIRE : UTILISATION DE JUNIT
Nous allons écrire un classe de test très simple.

1 : import pour les assertions
2 : import de Junit
7 : test 1 portant sur la somme
10 : assertion ok si les deux
parties sont égales
14 : test 2 portant sur le début
d’une chaine
16 : assertion ok la méthode
renvoie la valeur vrai
16
TEST UNITAIRE : CONCLUSION
Il est donc fortement conseillé d’utiliser les test unitaire
au sein de vos projets :
• Pour éviter les régressions
• Valider son code
• Voir l’avancement d’un projet

17
TEST UNITAIRE
Merci a tous !

Présentation réalisé pour ISEN Dev le 28/11/2013

18

Test unitaire

  • 1.
  • 2.
    SOMMAIRE • • • • • • • • • • • • Qu’est ce qu’untest ? Définition Quelques règles Avantage et intérêt Outil de test Cas à tester Les résultats Test Driven Development Mock Convention nommage Utilisation Junit Conclusion 1
  • 3.
    QU’EST CE QU’UNTEST ? Un test est un ensemble de cas à tester éventuellement accompagné d'une procédure d'exécution. Il est lié à un objectif. Source : IEE 2
  • 4.
    QU’EST CE QU’UNTEST ? Il existe différents niveaux de test : Test unitaire  Test d’intégration  Test de charge  Test fonctionnel  Test sécurité  ….  3
  • 5.
    TEST UNITAIRE :DÉFINITION Un test unitaire est une procédure permettant de vérifier le bon fonctionnement d'une partie précise d'un logiciel. Il s’agit d’un code. En POO  on teste au niveau des classes Pour chaque classe on a une classe de test. 4
  • 6.
    TEST UNITAIRE :QUELQUES RÈGLES     Doit être isolé : il doit être indépendant N’est pas un test de bout en bout : il agit que sur une portion de code Doit être déterministe : le résultat doit être le même pour les mêmes entrées Est le plus petit et simple possible 5
  • 7.
    TEST UNITAIRE :QUELQUES RÈGLES      Ne teste pas d'enchainement d’action Etre lancé le plus souvent possible : intégration continue Etre lancé le plus tôt possible : détection des bug plus rapide Couvrir le plus de code possible Etre lancé a chaque modification 6
  • 8.
    TEST UNITAIRE :AVANTAGE ET INTÉRÊT Garantie la non régression  Détection de bug plus facile  Aide a isoler les fonctions  Aide a voir l’avancement d’un projet (TDD)  7
  • 9.
    TEST UNITAIRE :OUTIL DE TEST PHP JS SQL JAVA PHPUnit SimpleTest1 JSUnit SQLUnit JUnit 1 : Fonctionnement similaire a JUnit 8
  • 10.
    TEST UNITAIRE :CAS A TESTER Lors de l’utilisation de test unitaire on se doit de tester différents cas. Cas en succès : fonctionnement normal  Cas d’erreur : test sur la gestion d’erreur  Cas aux limites : test de la robustesse  9
  • 11.
    TEST UNITAIRE :LES RÉSULTATS Un test unitaire peux renvoyer 4 résultats différents : Success : test réussi  Error : erreur inattendue a l’exécution  Failure : au moins une assertion est fausse  Incomplete / skipped ( à éviter)  10
  • 12.
    TEST UNITAIRE :TDD On peut piloter un projet par les test (Test Driven Development). On voit l’avancement du projet par l’avancement des test validés. Pour cela on réalise les test avant le code. A ce moment le test échoue, on implémente le code et pour qu’il se valide. Rédaction des tests 1 et 2 Code pour faire valider le test 2 Code pour faire valider le test 1 11
  • 13.
    TEST UNITAIRE :MOCK Quelques fois un test a besoin d’un composant pour s’exécuter. Par exemple pour tester le parseur XML il faut du XML et dans l’application le XML provient d’internet. Il est alors utile d’utiliser des bouchons (MOCK) pour isoler le test. De plus un bouchon permet de tester tout les cas (valeur correcte, erroné etc.) 12
  • 14.
    TEST UNITAIRE :CONVENTION NOMMAGE Il est recommandé d’utiliser une même convention de nommage pour tout les test unitaire. Par exemple test[nomMethode][cas][resultat/comportementAttendu](); Préfixe souvent imposé 13
  • 15.
    TEST UNITAIRE :UTILISATION DE JUNIT Il n'y a pas de limite au nombre de tests au sein de notre classe de test. On écris au moins un test par méthode de la classe testée. Pour désigner une méthode comme un test, il suffit d’utiliser l'annotation @Test (a partir de JUnit4). 14
  • 16.
    TEST UNITAIRE :UTILISATION DE JUNIT Au sein des tests on utilise des assertions pour valider ou non un test. Quelques assertions indispensable : Assertion Action assertEquals() Vérifie l’egalité entre deux entités assertNotEquals() Vérifie l’inégalité entre deux entités assertFalse() Vérifie que la valeur fourni en paramètre est fausse assertTrue() Vérifie que la valeur fourni en paramètre est vrai assertNull() Vérifie que la valeur fourni en paramètre est l’objet NULL assertNotNull() Vérifie que la valeur fourni en paramètre n’est pas l’objet NULL 15
  • 17.
    TEST UNITAIRE :UTILISATION DE JUNIT Nous allons écrire un classe de test très simple. 1 : import pour les assertions 2 : import de Junit 7 : test 1 portant sur la somme 10 : assertion ok si les deux parties sont égales 14 : test 2 portant sur le début d’une chaine 16 : assertion ok la méthode renvoie la valeur vrai 16
  • 18.
    TEST UNITAIRE :CONCLUSION Il est donc fortement conseillé d’utiliser les test unitaire au sein de vos projets : • Pour éviter les régressions • Valider son code • Voir l’avancement d’un projet 17
  • 19.
    TEST UNITAIRE Merci atous ! Présentation réalisé pour ISEN Dev le 28/11/2013 18