Testen in PHP: Frameworks und Werkzeuge für qualitativ hochwertigen Code

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

Testen in PHP: Frameworks und Werkzeuge

Qualitatives Testen ist die Grundlage einer zuverlässigen Webanwendung. Im PHP-Ökosystem hat sich ein leistungsstarker Satz an Werkzeugen etabliert, der alle Ebenen abdeckt: von Unit-Tests bis zu Akzeptanztests. In diesem Artikel betrachten wir die wichtigsten Frameworks und Bibliotheken, die Ihnen helfen, sauberen, testbaren Code zu schreiben.



1. PHPUnit – der De-facto-Standard

PHPUnit bleibt das beliebteste Framework für Unit-Tests in PHP. Es ist Bestandteil von Symfony, Laravel und vielen anderen Projekten. Hauptfunktionen:

  • Unterstützung von Assertions – von einfachen assertEquals bis zu komplexen assertJsonStructure.
  • Fixtures zur Vorbereitung und Bereinigung von Daten (setUp(), tearDown()).
  • Generierung von Berichten in den Formaten HTML, XML, Clover.
  • Integration mit 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 – flexible Erstellung von Stubs

Mockery erweitert die Möglichkeiten von PHPUnit zur Erstellung von Mock-Objekten. Es ist praktisch, wenn ein komplexer Dienst oder eine Datenbank ersetzt werden muss.

  • Unterstützung von teilweisem Mocking (partial mocks).
  • Überprüfung der Reihenfolge von Methodenaufrufen (shouldReceive).
  • Arbeit mit magischen Methoden (__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 – alles in einem

Codeception vereint Unit-, Funktions- und Akzeptanztests in einer einheitlichen Syntax. Besonders beliebt in Webprojekten, in denen Formulare, AJAX-Anfragen und Datenbanken getestet werden müssen.

  • Module für die Arbeit mit PHPBrowser, Selenium, Laravel, Symfony.
  • Generierung von Tests über die CLI: codecept generate:test.
  • Unterstützung von BDD (Behavior-Driven Development) über 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 – minimalistische Syntax

Pest ist eine moderne Alternative zu PHPUnit mit einer prägnanten Syntax, inspiriert von der JavaScript-Bibliothek Jest. Ideal für diejenigen, die die Lesbarkeit von Tests schätzen.

  • Automatische Auflösung von Abhängigkeiten.
  • Assertion-Verkettung: expect($result)->toBeTrue().
  • Integrierte Unterstützung für parallele Ausführung.
<?phpuse function Pest\\Faker\\faker;

test('it creates a user', function () { $user = User::factory()->create([ 'name' => faker()->name, 'email' => faker()->email, ]);

expect($u

Empfehlungen