Les tests avec PHPUnit

16 Avr 2021 | Développement, Open Source, PHP

Lors du développement d’une application en PHP, tester son code apporte une meilleure qualité du code qui sera déployé en production, en évitant les régressions. Une application testée aura plus de chances d’être adoptée par les utilisateurs. Côté équipe de développement, cela apporte un gain de temps non négligeable et une certaine sérénité lors des fameuses MEP (Mise En Production). De plus cela permet un débogage plus efficace et permet de localiser les points faibles du code.

Il existe plusieurs façons de tester son code, deux exemples sont :

  • Les tests unitaires qui permettent de tester le bon fonctionnement d’une portion d’application indépendamment de son environnement.
  • Les tests end-to-end qui permettent de tester le bon fonctionnement d’un ensemble de composant du point de vue d’un utilisateur final.

Prérequis

La bibliothèque PHPUnit est une référence pour se lancer dans les tests unitaires en PHP.  

Pour l’intégrer dans votre application PHP, nous pouvons nous appuyer sur le gestionnaire de dépendances PHP : Composer.

	composer require --dev phpunit/phpunit ^|version|

La version de votre PHP induira sur le choix de la version PHPUnit à inclure.

Voici le tableau des compatibilités pour vous aider à y voir plus clair :

Les Assertions

En PHP, le framework open-source PHPUnit permet d’implémenter des tests. Le fonctionnement de PHPUnit est assez simple car son but premier est de vérifier le résultat d’une exécution grâce à des assertions. « Est-ce vrai ? »

	public function addition($a, $b)    {
	         Return (a+b) ;
	    }

	public function testAddition()    {
	        $this->assertTrue(addition(2, 3)==5) ;
	    }

Ici, la méthode testAddition() va permettre de tester le fonctionnement de la fonction addition.
Nous voulons vérifier que le résultat attendu est conforme à nos attentes.

Une fois les tests lancés avec PHPUnit, la console renverra « 1 test effectué avec succès ».

PHPUnit propose beaucoup d’autres façons de tester via les assertions, en voici une liste non exhaustive :

  • assertTrue() ;  -> Est-ce vrai ?
  • assertFalse() ; -> Est-ce faux ?
  • assertEquals() ; -> Ces valeurs sont-elles égales ?
  • assertEmpty() ; -> Est-ce vide ?
  • assertCount() ; -> Mon objet contient-il bien le nombre d’éléments attendu ?
  • assertNull() ; -> Est-ce null ?
  • assertArrayHasKey() ;-> Est-ce que le tableau contient la clé recherchée ?

Vous pouvez retrouver ici l’ensemble des différentes assertions.

Démarrer les tests

En utilisation classique, les tests PHPUnit se lancent en ligne de commande via la commande :

phpunit

De cette façon, l’intégralité des résultats s’afficheront dans l’invite de commande :

Il est également possible de passer par un IDE tel que PHPStorm. La mise en place de configurations dans PHPStorm permet de lancer les tests directement et rapidement dans l’IDE.

Les résultats des tests sont alors directement accessibles dans l’outil qui nous sert à développer. Pratique pour switcher du dev au lancement des tests !

Utiliser un serveur remote (comme l’IBM i) pour les tests

Avec un IDE comme PHPStorm, il est aussi possible de créer des configurations qui permettent d’exécuter des tests qui ne sont pas en local sur votre machine mais sur un serveur distant. 

Cela peut s’avérer utile voir nécessaire lorsqu’il n’est pas possible de reproduire l’environnement cible en local ou encore si votre environnement local est dépourvu de PHP.

Ce mode de fonctionnement des tests sur un remote serveur peut s’appuyer sur le protocole SSH (protocole sécurisée largement utilisé en environnement IBM i) mais pas uniquement, PHPStorm propose aussi bien d’autres options :

  • SSH
  • Docker
  • Vagrant
  • WSL

Configurations pour tests unitaires sur un serveur distant

A noter que ce mode de lancement des tests utilisera le runtime PHP de l’environnement distant.

Vous souhaitez en savoir plus ou bénéficier d’une assistance pour démarrer avec les tests unitaires ? Contactez-nous !

Auteurs : Gautier Dumas et Pierre Bec.