Test en PHP : aperçu des frameworks et outils (PHPUnit, Pest, Codeception)

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

Test en PHP : frameworks et outils



La qualité du code est la base d'un projet web réussi. Pour les développeurs PHP, les tests ont cessé d'être une option pour devenir une étape obligatoire du développement. Dans cet article, nous analyserons trois outils clés : PHPUnit (standard de l'industrie), Pest (minimalisme moderne) et Codeception (tests d'intégration). Vous apprendrez à écrire des tests unitaires, à travailler avec des objets mock et à implémenter le TDD dans des projets PHP.



1. PHPUnit — le fondement des tests PHP



PHPUnit est la norme de facto pour les tests unitaires en PHP. Il fait partie de Symfony, Laravel et d'autres frameworks populaires.



Installation et test de base

composer require --dev phpunit/phpunit


Exemple d'un test simple pour une classe de calculatrice :

// src/Calculator.phpclass Calculator {    public function add($a, $b) {        return $a + $b;    }}

// tests/CalculatorTest.phpuse PHPUnit\\Framework\\TestCase;

class CalculatorTest extends TestCase { public function testAddition() { $calc = new Calculator(); $this->assertEquals(4, $calc->add(2, 2)); }}


Travail avec les objets mock

PHPUnit fournit un mécanisme intégré pour créer des bouchons (mock) :

public function testUserRepository() {    $mockRepo = $this->createMock(UserRepository::class);    $mockRepo->method('findById')             ->willReturn(new User(1, 'Alice'));

$service = new UserService($mockRepo); $result = $service->getUser(1); $this->assertEquals('Alice', $result->getName());}


2. Pest — une syntaxe élégante pour les tests



Pest est une surcouche de PHPUnit offrant une syntaxe plus concise et lisible. Idéal pour les projets où la rapidité d'écriture des tests est importante.



Installation et exemple

composer require --dev pestphp/pest


Comparez avec PHPUnit : le même test dans Pest ressemble à ceci :

// tests/CalculatorTest.phpit('calculates addition', function () {    $calc = new Calculator();    expect($calc->add(2, 2))->toBe(4);});


Fonctionnalités avancées

  • Higher Order Tests — chaînes d'appels sans imbrication
  • Architecture Testing — vérification de la structure des classes
  • Snapshot Testing — comparaison avec des données de référence


3. Codeception — pour les tests d'intégration et fonctionnels



Codeception combine les tests unitaires, fonctionnels et d'acceptation dans un seul framework. Il prend en charge Selenium, Symfony, Laravel, Yii et même WordPress.



Structure des tests

codecept generate:cest acceptance LoginCest


Exemple de test fonctionnel pour Laravel :

// tests/functional/UserCest.phpclass UserCest {    public function testLogin(FunctionalTester $I) {        $I->amOnPage('/login');        $I->fillField('email', 'user@example.com');        $I->fillField('password', 'secret');        $I->click('Login');        $I->see('Dashboard');    }}


4. Outils supplémentaires



  • Mockery — bibliothèque flexible pour les objets mock (alternative aux mocks intégrés de PHPUnit)
  • PHPStan / Psalm — analyse statique, détectant les erreurs avant l'exécution des tests
  • Infection — tests de mutation : vérifie la qualité des tests eux-mêmes
  • PHP CodeSniffer — contrôle de conformité à PSR-12


5. Exemple pratique : TDD pour un service API



Implémentons un cycle TDD (Test-Driven Development) simple pour un service de commandes :



Étape 1. Écrire le test

// tests/OrderServiceTest.phppublic function testCrea                    

Recommendations