PHPUnit pour PHP : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que PHPUnit et pourquoi en a-t-on besoin ?

\n\n

PHPUnit est un framework de test unitaire (unit testing) pour le langage PHP. Il fait partie de la famille xUnit et fournit aux développeurs des outils pour automatiser la vérification du bon fonctionnement des composants individuels d'un programme (classes, méthodes, fonctions).

\n\n

Pourquoi PHPUnit est-il nécessaire ?

\n
    \n
  • Détection précoce des erreurs : Les tests sont exécutés après chaque modification du code, permettant d'identifier immédiatement les régressions.
  • \n
  • Documentation du code : Des tests bien écrits servent de documentation vivante, montrant comment une méthode particulière doit fonctionner.
  • \n
  • Refactorisation sans crainte : Vous pouvez réécrire le code en toute confiance, sachant que les tests ne permettront pas de casser les fonctionnalités existantes.
  • \n
  • Support du TDD (Test-Driven Development) : Le développement piloté par les tests est une méthodologie où l'on écrit d'abord le test, puis le code minimal pour le faire passer.
  • \n
  • Intégration avec CI/CD : PHPUnit s'intègre facilement dans les pipelines d'intégration continue (GitHub Actions, GitLab CI, Jenkins).
  • \n
\n\n

PHPUnit prend en charge les mocks (objets simulés), les fixtures (ensembles de données pour les tests), la couverture de code (code coverage) et de nombreuses autres fonctionnalités avancées.

\n\n

Installation de PHPUnit

\n\n

PHPUnit s'installe via Composer, le gestionnaire de dépendances pour PHP. Si vous n'avez pas encore Composer, installez-le depuis le site officiel getcomposer.org.

\n\n

Installation globale (recommandée pour CLI)

\n
composer global require phpunit/phpunit
\n\n

Après cela, assurez-vous que le répertoire des paquets globaux de Composer est ajouté au PATH. Vérifiez l'installation :

\n
phpunit --version
\n\n

Installation locale (dans le projet)

\n
composer require --dev phpunit/phpunit
\n\n

Ensuite, PHPUnit sera accessible via vendor/bin/phpunit.

\n\n

Installation d'une version spécifique

\n
composer require --dev phpunit/phpunit:^10.0
\n\n

Important : La version de PHPUnit doit correspondre à la version de PHP dans votre projet. Par exemple, PHPUnit 10 nécessite PHP 8.1 ou supérieur.

\n\n

Démarrage rapide avec un exemple de code

\n\n

Créons une classe simple Calculator.php et écrivons des tests pour elle.

\n\n

Étape 1. Création de la classe à tester

\n
<?php\n// src/Calculator.php\n\nclass Calculator\n{\n    public function add(int $a, int $b): int\n    {\n        return $a + $b;\n    }\n\n    public function subtract(int $a, int $b): int\n    {\n        return $a - $b;\n    }\n\n    public function multiply(int $a, int $b): int\n    {\n        return $a * $b;\n    }\n\n    public function divide(int $a, int $b): float\n    {\n        if ($b === 0) {\n            throw new \\InvalidArgumentException("Division by zero");\n        }\n        return $a / $b;\n    }\n}
\n\n

Étape 2. Création de la classe de test

\n
<?php\n// tests/CalculatorTest.php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n    private Calculator $calculator;\n\n    protected function setUp(): void\n    {\n        $this->calculator = new Calculator();\n    }\n\n    public function testAdd(): void\n    {\n        $result = $this->calculator->add(2, 3);\n        $this->assertEquals(5, $result);\n    }\n\n    public function testSubtract(): void\n    {\n        $result = $this->calculator->subtract(10, 4);\n        $this->assertEquals(6, $result);\n    }\n\n    public function testMultiply(): void\n    {\n        $result = $this->calculator->multiply(3, 4);\n        $this->assertEquals(12, $result);\n    }\n\n    public function testDivide(): void\n    {\n        $result = $this->calculator->divide(10, 2);\n        $this->assertEquals(5.0, $result);\n    }\                    

Recommendations