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
assertEqualsbis zu komplexenassertJsonStructure. - 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 Auch in der Bibliothek
HTTP-Client für Rust: Top-Bibliotheken und Tools