WEB-d Développement Web

PHP, SQL, HTML5, CSS3, Javascript, Mootools, Référencement, SEO, CMS, e-commerce, Apache, Linux, Ubuntu, ...

Tests PHPUnit

PHPUnit permet de tester automatiquement et de façon répétée votre code PHP.

Installation

La version disponible sur PEAR est ancienne, il vaut mieux utiliser directement le channel pear.phpunit.de:


sudo pear channel-discover pear.phpunit.de
sudo pear channel-discover pear.symfony.com
sudo pear channel-discover components.ez.no
sudo pear install phpunit/PHPUnit
sudo pear install phpunit/PHPUnit_SkeletonGenerator

Le package PHPUnit_SkeletonGenerator installe la commande phpunit-skelgen permet de créer les tests à partir d'une classe existante.

Netbeans

Il est également possible de créer et exécuter les tests directement dans Netbeans.

Dans la fenêtre Tools -> Options, onglet PHP -> General, il faut ajouter le dossier de PHPUnit (généralement /usr/share/php/PHPUnit) au Global Include Path.

Ensuite, pour créer un test, il suffit de faire un clic droit sur le fichier, puis de sélectionner Tools -> Create PHPUnit tests. Lorsqu'on crée le premier test, NetBeans demande dans quel dossier les fichiers de test doivent être placés. Il n'y a pas d'obligation, mais l'habitude veut qu'on les place dans un dossier "tests" situé à la racine du projet.

Utiliser bootstrap et autoload pour le chargement des fichiers

Avant d'exécuter les tests, PHPUnit ne charge pas lui-même les fichiers correspondant aux différentes classes. Vous devez donc vous-même, dans chaque fichier test, ajouter les lignes require_once (ou include_once) nécessaires:


include_once('../classes/MaClasse.php');
include_once('../classes/MonAutreClasse.php');
 

Ou alors, on peut créer un fichier bootsrap.php qui sera exécuté automatiquement par PHPUnit avant les tests. Avec NetBeans c'est très simple, il suffit de faire un clic droit sur le projet puis Properties, et dans l'onglet PHPunit cliquer sur Use Bootsrap et Generate.

Dans le dossier tests, Netbeans crée un fichier bootstrap.php par défaut. On peut alors le modifier pour ajouter un autoloader, comme celui ci-dessous par exemple, qui fonctionne aussi bien avec ou sans namespace:



ini_set('include_path',
        ini_get('include_path').PATH_SEPARATOR.
        '/usr/share/php/PHPUnit'.PATH_SEPARATOR.
        __DIR__ . '/../src/');

spl_autoload_register(function($class) {
    $parts = explode('\\', $class);
   
    $parts[] = str_replace('_', DIRECTORY_SEPARATOR, array_pop($parts));

    $path = implode(DIRECTORY_SEPARATOR, $parts);
   
    $file = stream_resolve_include_path($path.'.php');
    if($file !== false) {
        require $file;
    }
});

// Si vous utilisez Composer, il faut inclure autoload.php
include_once __DIR__ . '/../vendor/autoload.php';
 

Ecrire les tests

Pour écrire des tests PHPUnit:

  1. Etendre la classe PHPUnit_Framework_TestCase;
  2. Les tests doivent se trouver dans une nouvelle classe NomDeLaClasseATesterTest;
  3. Chaque test est une méthode publique, dont le nom commence par test;
  4. A l'intérieur des méthodes de test, on utilise des assertions, telles que assertEquals($valeur_attendue, $valeur_reelle).


class MaClasseTest extends PHPUnit_Framework_TestCase
{
    public function testMaMethode()
    {
        $this->assertEquals('abc123', 'abc124');
    }
}
 

La liste complète des assertions est disponible sur le site de PHPUnit

Couverture (code coverage)

PHPUnit est également capable de calculer les lignes de votre code qui sont testées par les tests. Le résultat peut également être affiché par Netbeans.

Articles similaires