Découverte de phpunit
Florian JOURNEAU
28 November 2020
Catégorie :
PHP
Installation
Via composer :
composer require phpunit/phpunit
Une fois installé, on peut le trouver via :
./vendor/bin/phpunit
Pour la suite, on créera nos cas de test dans le dossier
./tests
.Je passe les explications mais on va bien-sûr travailler avec l'autoloader de composer. Plus d'infos sur le site de phpunit : https://phpunit.de/getting-started/phpunit-9.html .
Cet article parlera de la version 9.4.3 de phpunit.
Premiers tests
phpUnit va servir à faire des tests unitaires sur des classes.On va créer des classes en PHP pour tester nos classes. Pas convention, le nom du test (nom de la classe de test) sera le nom de la classe suivi de la valeur Test.
Exemple, classe
MaClasse
, la classe de test sera MaClassTest
.La classe de test devra étendre de
TestCase
.Pour vérifier si un test est OK, on va utiliser des assertions.
La liste est disponible dans la doc. ( https://phpunit.readthedocs.io/fr/latest/assertions.html )
Ici on va faire utiliser l'assertion assertEquals() pour vérifier si une valeur est égale à une autre .
(Le test est bidon, c'est juste pour l'exemple).
<?php
use PHPUnit\Framework\TestCase;
class MaClasseTest extends TestCase
{
public function testBidon()
{
$this->assertEquals(4, 2 * 2);
}
}
Pour lancer ce test, qui pour rappel se trouve dans le dossier
./tests
, on exécute :
./vendor/bin/phpunit ./tests
Les méthodes dans la classe de test doivent commencer par test (pour décrire un test bien-sûr), les méthodes commençant par autre choses ne seront pas exécutées.
Configuration
Plutôt que de devoir taper cette ligne avec le répertoire ./vendor/bin/phpunit ./tests, nous allons créer un fichier de configuration afin d'y stocker le répertoire de tests
./tests
et d'autres paramètres.A la racine du projet :
<?xml version="1.0" encoding="utf-8" ?>
<phpunit colors="true">
<testsuite name="Tests de fJourneau">
<directory>./tests</directory>
</testsuite>
</phpunit>
Le paramètre color va rajouter de la couleur (vert si OK, rouge si au moins 1 erreur), ce qui est beaucoup plus simple à la lecture.
On peut maintenant exécuter nos tests via la commande :
./vendor/bin/phpunit
Quelques exemples
MaClasseTest.php :
<?php
use fjourneau\MaClasse;
use PHPUnit\Framework\TestCase;
class MaClasseTest extends TestCase
{
public function testBidon()
{
$this->assertEquals(4, 2 * 2);
}
public function testReel(){
$this->assertEquals(6, MaClasse::multiply(2,4), 'Test de multiplication MaClasse::multiply()');
}
}
La chaine de caractère passée en 3ème paramètre de assertEquals() n'est affichée qu'en cas de test KO. Cela permet d'ajouter (éventuellement) un texte qui permettra de comprendre sans aller voir le code dans la méthode, ce qui a foiré.