PHPUnit est un Framework puissant permettant d’automatiser des tests unitaires sur une application écrite en PHP.
Qu’est ce qu’un test unitaire
Usuellement il s’agit d’un morceau de code source permettant de tester si une fonction (ou une méthode d’une classe en POO) a le fonctionnement attendu.
Ainsi dans l’idéal, chaque fonction de notre application doit avoir un test associé. Le rapport entre le nombre de fonctions étant testés effectivement par un test unitaire ET le nombre de fonctions non testés donne une indication de la couverture du code (code coverage
)
Chaque test unitaire doit être en général indépendant car associé à une seule et même fonction. Il se peut par contre que l’exécution de la suite de tests
nécessite l’exécution d’un script de démarrage.
Par exemple si vous voulez tester que la fonction f renvoi bien le nombre de point qu’un de vos utilisateurs a récolté, il faudra bien qu’un script exécuté avant toute chose crée cette utilisateur et lui associé un nombre de points, afin de vérifier si le résultat est bien celui attendu.
Ecrire des tests unitaires permet d’avoir un code modulaire et évolutif qui sépare correctement l’interface de l’implémentation. Le module qui est suffisamment testé peut être réutilisé dans un développement ultérieur.
Avantages des tests unitaires
Avoir une application avec des tests unitaires permet de livrer en production des versions de votre application fonctionnelle en toute confiance. Par exemple, votre équipe a développé une grosse brique fonctionnelle susceptible d’impacter d’autres fonctionnalités du site. Livrer sur l’environnement de production une telle modification peut être catastrophique. Le passage en revue de tous les tests permettra de s’assurer que cette nouvelle fonctionnalité fonctionne de manière attendu sans détériorer l’existant (on appelle ce cas une régression fonctionnelle
).
Rédiger des tests pour chaque fonction nécessite un temps additionnel pour le développeur mais en rédigeant des tests de qualité, cela améliorera intrinsèquement la documentation du code. Un nouvel arrivant pourra se référer aux tests pour comprendre le fonctionnement de telle fonction.
Installation de PHPUnit sur macOs
Ouvrez votre terminal
Dans ce dernier tapez les commandes suivantes
1 | $ curl https://phar.phpunit.de/phpunit.phar -L -o phpunit.phar |
NB : Ne pas recopier le symbole dollar ($), il s’agit ici d’une convention d’écriture dans le terminal.
Ces 3 commandes permettent de télécharger phpunit.phar
. The chmod
command va modifier les droits d’accès du fichier phpunit.phar
. Plus précisément cela va donner le droit de lecture et d’exécution du fichier à tous les utilisateurs, les groupes et les autres parties du système.
La commande mv
permet quand à elle de changer de place ce fichier, de l’emplacement actuel à l’emplacement /usr/local/bin/phpunit
- Afin de vérifier si l’installation s’est bien déroulée veillez à exécuter cette commande :
1 | $ phpunit -version |
Si l’installation est OK vous devriez voir s’afficher dans votre terminal la ligne suivante :1
PHPUnit 5.5.0 by Sebastian Bergmann and contributors.
(La version peut changer)
Configuration d’un projet existant et rédaction du premier test
- Sur un projet existant la première étape va consister à créer un dossier nommé
tests
à la racine de votre dossier.
Dans ce dernier vous allez placer tous vos tests. La règle étant que pour chaque classe de votre projet (si vous utilisez la POO) un fichier devra être créé.
La convention de nommage que j’utilise personnellement est la suivante :1
NomDeVotreClasseTests.php
ou en camel case :1
nom_de_la_classe_tests.php
- Ainsi si vous avez une classe
Utilisateur
définie au sein du fichierUtilisateur.php
vous trouverez en miroir un fichier de test de cette classe nomméUtilisateurTests.php
Ce fichier aura toujours une composition identique :
1 | //fichier : tests/UtilisateurTests.php |
Nous avons donc ici la classe permettant de tester la classe Utilisateur
.
Cette classe se nomme UtilisateurTests
et il s’agit d’une extension de la classe TestCase
. Cette dernière est une classe interne à PHPUnit et elle nous permet d’utiliser des méthodes faciles pour écrire nos tests.
Ici un seul test unitaire est définit. En fait un test unitaire est une méthode de la classe de test (UtilisateurTests
). Chaque test va donc tester une méthode de notre classe Utilisateur
.
- L’étape suivante consiste à écrire effectivement notre test.
1 |
|
Le cas de test consiste simplement à lancer la méthode function_number_one avec le paramètre 123.
Nous allons ensuite tester si le résultat d’exécution de cette méthode est bien égale au résultat attendu grâce à la ligne $this->assertEquals("resultat attendu", $resultat_function_number_one);
- Exécuter le test
Afin de lancer votre test il suffit d’ouvrir votre terminal et de taper :1
2$ cd le_dossier_contenant_votre_application
$ phpunit tests
La commande numéro 2 va dire à PHPUnit de lancer l’exécution des tests définit dans le dossier tests
Et voilà ! Bon tests