Découverte de phpunit

Florian Journeau
Florian JOURNEAU 28 Novembre 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é.