Tests en PHP : frameworks et outils
Des tests de qualité sont la base d'une application web fiable. L'écosystème PHP dispose d'un ensemble puissant d'outils couvrant tous les niveaux : des tests unitaires aux tests d'acceptation. Dans cet article, nous examinerons les principaux frameworks et bibliothèques qui vous aideront à écrire un code propre et testable.
1. PHPUnit — le standard de facto
PHPUnit reste le framework le plus populaire pour les tests unitaires en PHP. Il fait partie de Symfony, Laravel et de nombreux autres projets. Principales fonctionnalités :
- Prise en charge des assertions — des simples
assertEqualsaux complexesassertJsonStructure. - Fixtures pour la préparation et le nettoyage des données (
setUp(),tearDown()). - Génération de rapports aux formats HTML, XML, Clover.
- Intégration avec CI/CD (GitHub Actions, GitLab CI, Jenkins).
<?phpuse PHPUnit\\Framework\\TestCase;
class CalculatorTest extends TestCase{ public function testAddition() { $calc = new Calculator(); $this->assertEquals(4, $calc->add(2, 2)); }
public function testDivisionByZero() { $this->expectException(\\DivisionByZeroError::class); $calc = new Calculator(); $calc->divide(10, 0); }}2. Mockery — création flexible de bouchons
Mockery étend les capacités de PHPUnit pour la création d'objets mock. Elle est pratique lorsqu'il faut remplacer un service complexe ou une base de données.
- Prise en charge du mock partiel (partial mocks).
- Vérification de l'ordre des appels de méthodes (
shouldReceive). - Travail avec les méthodes magiques (
__call,__get).
<?phpuse Mockery as m;
class OrderProcessorTest extends TestCase{ public function testProcess() { $gateway = m::mock(PaymentGateway::class); $gateway->shouldReceive('charge') ->once() ->with(100.0) ->andReturn(true);
$processor = new OrderProcessor($gateway); $this->assertTrue($processor->process(100.0)); }
protected function tearDown(): void { m::close(); }}3. Codeception — tout-en-un
Codeception combine les tests unitaires, fonctionnels et d'acceptation dans une syntaxe unifiée. Particulièrement populaire dans les projets web où il faut tester des formulaires, des requêtes AJAX et des bases de données.
- Modules pour travailler avec PHPBrowser, Selenium, Laravel, Symfony.
- Génération de tests via CLI :
codecept generate:test. - Prise en charge du BDD (Behavior-Driven Development) via Gherkin.
<?php// acceptance.suite.ymlactor: AcceptanceTestermodules: enabled: - WebDriver: url: 'http://localhost' browser: chrome - Laravel5: environment_file: .env.testing
// tests/acceptance/LoginCept.php$I = new AcceptanceTester($scenario);$I->wantTo('see that login form works');$I->amOnPage('/login');$I->fillField('email', 'user@example.com');$I->fillField('password', 'secret');$I->click('Login');$I->see('Dashboard');4. Pest — syntaxe minimaliste
Pest est une alternative moderne à PHPUnit avec une syntaxe concise, inspirée de la bibliothèque JavaScript Jest. Idéal pour ceux qui apprécient la lisibilité des tests.
- Résolution automatique des dépendances.
- Chaînes d'assertions :
expect($result)->toBeTrue(). - Prise en charge intégrée de l'exécution parallèle.
<?phpuse function Pest\\Faker\\faker;
test('it creates a user', function () { $user = User::factory()->create([ 'name' => faker()->name, 'email' => faker()->email, ]);
expect($u Aussi dans la bibliothèque
Travailler avec Markdown en Go (Golang) : bibliothèques, analyse et conversion
Bibliothèque standard Go (Golang) : aperçu complet
node-cron — Planificateur de tâches pour Node.js