Testen in PHP: Überblick über Frameworks und Tools (PHPUnit, Pest, Codeception)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in das Testen von PHP-Anwendungen

Testen ist ein wesentlicher Bestandteil der professionellen PHP-Entwicklung. Es ermöglicht die frühzeitige Erkennung von Fehlern, vereinfacht Refactoring und erhöht die Stabilität des Codes. Im PHP-Ökosystem hat sich ein leistungsstarkes Toolkit etabliert: vom klassischen PHPUnit über moderne Frameworks wie Pest bis hin zu spezialisierten Werkzeugen für Codeabdeckungsanalyse und Mutationstests.

In diesem Artikel betrachten wir die wichtigsten Frameworks und Tools, die Ihnen helfen, qualitativ hochwertige Tests für PHP-Projekte zu organisieren.



PHPUnit – die Grundlage des Testens

PHPUnit ist der De-facto-Standard für Unit-Tests in PHP. Es unterstützt alle modernen Funktionen: Assertions, Fixtures (setUp/tearDown), Data Provider, Exception-Tests, Stubs und Mocks.

Installation über Composer:

composer require --dev phpunit/phpunit


Beispiel eines einfachen Tests für eine Rechner-Klasse:

<?phpuse PHPUnit\\Framework\\TestCase;

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

/** @dataProvider additionProvider */ public function testWithDataProvider($a, $b, $expected) { $calculator = new Calculator(); $this->assertEquals($expected, $calculator->add($a, $b)); }

public function additionProvider(): array { return [ [0, 0, 0], [1, 1, 2], [-1, 1, 0], ]; }}


Wichtige Funktionen von PHPUnit:

  • Assertions: assertEquals, assertTrue, assertCount, assertInstanceOf und Dutzende weitere.
  • Fixtures: Methoden setUp() und tearDown() zur Vorbereitung und Bereinigung der Testumgebung.
  • Data Provider: Annotation @dataProvider zum Ausführen eines Tests mit verschiedenen Datensätzen.
  • Exception-Tests: expectException() und expectExceptionMessage().
  • Stubs und Mocks: createMock() und getMockBuilder() zur Isolation des zu testenden Codes.


Pest – elegant und modern

Pest ist ein Test-Framework, das auf PHPUnit aufbaut, aber eine prägnantere und ausdrucksstärkere Syntax bietet. Es ist von Jest (JavaScript) inspiriert und eignet sich hervorragend für Projekte, bei denen die Lesbarkeit der Tests wichtig ist.

Installation:

composer require --dev pestphp/pest


Beispiel desselben Tests in Pest:

<?php

use function Pest\\Faker\\fake;

test('addition works correctly', function () { $calculator = new Calculator(); expect($calculator->add(2, 2))->toBe(4);});

dataset('numbers', [ [0, 0, 0], [1, 1, 2], [-1, 1, 0],]);

test('addition with data provider', function ($a, $b, $expected) { $calculator = new Calculator(); expect($calculator->add($a, $b))->toBe($expected);})->with('numbers');


Vorteile von Pest:

  • Minimaler Boilerplate-Code – keine Testklassen erforderlich.
  • Integrierte Funktionen expect(), test(), it() für natürlichsprachliche Beschreibungen.
  • Automatische Registrierung von Tests aus globalen Funktionen.
  • Unterstützung für verschachtelte Gruppen (describe) und Architekturtests.


Codeception – für Integrations- und BDD-Tests

Codeception ist ein universelles Framework, das Unit-, funktionale, Integrations- und Akzeptanztests vereint. Es ist besonders beliebt beim Testen von Webanwendungen (Laravel, Symfony, Yii) und APIs.

Installation:

composer require --dev codeception/codeception


Beispiel eines Akzeptanztests für die Anmeldung auf einer Website:

<?php$I = new AcceptanceTester($scenario);$I->amO                    

Empfehlungen