PHP - Tests unitaires avec PHPUnit

1 1 1 1 1 1 1 1 1 1 Rating 0.00 (0 Votes)
Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn

PHPUnit est un framework de tests unitaires open source dédié au langage de programmation PHP. Crée par Sebastian Bergmann,il intègre les concepts communs aux bibliothèques de tests unitaires xUnit.

Installation de PHPUnit

Installation sous Linux/Debian

Sous debian, vous pouvez installer la dernière version de PHPUnit simplement avec la commande :

aptitude update
aptitude install phpunit

Vérification de l'installation

Pour vérifier que l'installation a bien été réalisée, vous pouvez exécuter la commande ci-dessous :

phpunit --help

Et :

phpunit --version

Pour connaitre la version de PHPUnit.

Exemple d'utilisation

Nous allons réaliser une class qui permet d'ajouter, soustraire, multiplier et diviser deux nombres.

Fichier Calculator.php 

<?php

class Calculator
{
    public function add($val1,$val2){
        return $val1+$val2;
    }

    public function subtract($val1,$val2){
        return $val1-$val2;
    }

    public function multiply($val1,$val2){
        return $val1*$val2;
    }

    public function divide($val1,$val2){
        return $val1/$val2;
    }
}
?>

Et sa class de tests associée CalculatorTest.php :

<?php
class CalculatorTest extends PHPUnit_Framework_TestCase{
    public function setUp(){
        require_once 'Calculator.php';
    }

    public function testAdd(){
        $this->assertEquals(4,Calculator::add(2,2));
        $this->assertEquals(100,Calculator::add(81,19));
        $this->assertEquals(23,Calculator::add(20,3));
    }

    public function testSubtract(){
        $this->assertEquals(-3,Calculator::subtract(4,7));
        $this->assertEquals(0,Calculator::subtract(6,6));
        $this->assertEquals(7,Calculator::subtract(4,-3));
    }

    public function testMultiply (){
        $this->assertEquals(63,Calculator::multiply(9,7));
        $this->assertEquals(-14,Calculator::multiply(2,-7));
        $this->assertEquals(35,Calculator::multiply(-5,-7));
    }

    public function testDivide (){
        $this->assertEquals(1,Calculator::divide(9,9));
        $this->assertEquals(3,Calculator::divide(-9,-3));
        $this->assertEquals(-5,Calculator::divide(-10,2));
    }
}
?>

Pour exécuter PHPUnit, il faut se mettre à la racine du code source puis exécuter la commande ci-dessous : 

phpunit CalculatorTest.php

Si tout c'est bien passé, vous aurez le résultat ci-dessous : 

PHPUnit 3.4.14 by Sebastian Bergmann.

....

Time: 0 seconds, Memory: 2.25Mb

OK (4 tests, 12 assertions)

Si vous avez des erreurs : 

PHPUnit 3.4.14 by Sebastian Bergmann.

FF.F

Time: 0 seconds, Memory: 2.25Mb

There were 3 failures:

1) CalculatorTest::testAdd
Failed asserting that <integer:100> matches expected <integer:10>.

/home/debian/www/test/phpunit.calculator/CalculatorTest.php:9

2) CalculatorTest::testSubtract
Failed asserting that <integer:0> matches expected <integer:7>.

/home/debian/www/test/phpunit.calculator/CalculatorTest.php:15

3) CalculatorTest::testDivide
Failed asserting that <integer:3> matches expected <integer:4>.

/home/debian/www/test/phpunit.calculator/CalculatorTest.php:27

FAILURES!
Tests: 4, Assertions: 9, Failures: 3.

Télécharger le code source : PHP - Tests unitaires avec PHPUnit

Différents tests disponibles

Vous l'avez devenez dans le test précédent, assertEquals permet de vérifier si 2 valeurs sont égales et lever une erreur en cas de différence mais il y existe de nombreux autres tests possibles. En voici les principaux : 

  • assertEquals($valeur, $valeurAttendu [, $message]) vérifie si les valeurs sont identiques (ex: assertEquals(0, 1) lévera une erreur)
  • assertFalse($condition [, $message]) vérifie si la condition est fausse (ex: assertFalse(0==0) lévera une erreur)
  • assertNotEquals($valeur, $valeurAttendu [, $message]) vérifie si les valeurs sont différentes (ex: assertNotEquals(1, 1) lévera une erreur)
  • assertNotNull($valeur [, $message]) vérifie si la valeur n'est pas null (ex: assertNotNull(null) lévera une erreur)
  • assertNull($valeur [, $message]) vérifie si la valeur est null (ex: assertNull("toto") lévera une erreur)
  • assertSame($valeur, $valeurAttendu [, $message]) vérifie si les paramètres sont de même type et même valeur (i.e. la même instance s'il s'agit d'objet) (ex: assertSame(0, false) et assertSame(new MaClasse(), new MaClasse()) léveront une erreur)
  • assertNotSame($valeur, $valeurAttendu [, $message]) inverse de assertSame()
  • assertTrue($condition [, $message]) vérifie si la condition est vraie (ex: assertTrue(1==0) lévera une erreur)
Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn