Privatsphären-Einstellungen

Auf unserer Website verwenden wir verschiedene Arten von Cookies: technische, funktionale und Analyse-Cookies. Grundsätzlich können Sie unsere Seite auch ohne Cookies besuchen. Wenn Sie auf "Akzeptieren" klicken, stimmen Sie der Nutzung dieser Technologien zu. Details

Zum Inhalt springen

PHPUnit: Das PHP-Testing-Framework für Webentwickler

TDD in Webdevelopment Laravel.

PHPUnit ist ein weit verbreitetes Testing-Framework für PHP Anwendungen. Es wurde von Sebastian Bergmann entwickelt und ist heute ein fester Bestandteil der PHP-Entwicklungslandschaft.

PHPUnit ermöglicht es Entwicklern, automatisierte Tests für PHP-Apps zu schreiben und auszuführen, um die Qualität und Stabilität der Software sicherzustellen.

Es ist die Grundlage für pest, ein speziell auf Laravel zugeschnittenes Meta-Testframework.

Executing Feature Tests in Terminal.

PHPUnit: Eine Übersicht

Wozu dient PHPUnit?

PHPUnit dient dazu, die Korrektheit und Stabilität von PHP-Code bzw. von ganzen PHP-Applikationen zu prüfen. Es ist ein Werkzeug zur Qualitätssicherung.

Durch die Verwendung von PHPUnit können Entwickler sicherstellen, dass einzelne Codekomponenten (Unit-Tests) und größere Funktionseinheiten (Feature-Tests) wie erwartet funktionieren.

Dies hilft, Fehler frühzeitig zu erkennen und zu beheben, die Codequalität zu verbessern und die Wartbarkeit der Software zu erhöhen.

Geschichte und Entwicklung

PHPUnit wurde erstmals 2002 von Sebastian Bergmann veröffentlicht. Es hat sich seitdem zu einem Standardwerkzeug in der PHP-Entwicklungsgemeinschaft entwickelt. Die kontinuierliche Weiterentwicklung und der offene Quellcode tragen zur Verbreitung und Verbesserung des Frameworks bei.

Funktionen

PHPUnit bietet eine Vielzahl von Funktionen, darunter:

  • Testfälle und Test-Suiten: Tests können in einzelne Testfälle und Test-Suiten organisiert werden, um die Verwaltung großer Testmengen zu erleichtern.

  • Assertions: Eine Vielzahl von Assertion-Methoden ermöglicht die Überprüfung von Werten und Zuständen.

  • Mocking: Mit Mock-Objekten können Abhängigkeiten simuliert und das Verhalten von Komponenten isoliert getestet werden.

  • Datenbank-Tests: Unterstützung für Datenbanktests, einschließlich der Möglichkeit, Datenbankzustände vor und nach Tests zu überprüfen.

  • Berichtserstellung: Umfangreiche Berichtsfunktionen wie Code Coverage, die Testresultate in verschiedenen Formaten (z. B. XML, HTML) ausgeben können.

Ein Beispiel für PHPUnit Tests

PHPUnit wird typischerweise über die Kommandozeile ausgeführt, kann aber auch in verschiedene Continuous-Integration-Systeme (CI) integriert werden. Die grundlegende Nutzung umfasst das Erstellen von Testklassen, die von PHPUnit\Framework\TestCase abgeleitet werden und Assertions enthalten.

<?php 

use PHPUnit\Framework\TestCase;

class BeispielTest extends TestCase
{
    public function testAddition()
    {
        $this->assertEquals(4, 2 + 2);
    }
}

PHPUnit und Laravel

PHPUnit spielt in Laravel eine zentrale Rolle beim Testen von Anwendungen.

Laravel integriert PHPUnit nahtlos und bietet vorkonfigurierte Testumgebungen, um Entwicklern den Einstieg zu erleichtern.

Out-of-the-box wird PHPUnit von Laravel um zusätzliche Funktionen erweitert, die speziell auf Laravel-Anwendungen zugeschnitten sind, wie z.B. das Testen von Routes, Middlewares und Eloquent-Models.

PHPUnit und pest

pest, das auf PHPUnit aufbauende Testing-Framework, gewinnt zunehmend an Popularität.

Pest verschlankt die Tests und ergänzt neue Funktionen. Pest basiert auf PHPUnit und kann nahtlos mit dessen Funktionalitäten kombiniert werden. Vorhandene PHPUnit-Tests müssen nicht verändert werden um weiterhin mit Pest genutzt zu werden.

Ein pest-Test

<?php

use function Pest\Laravel\get;

it('returns a successful response from the home page', function () {
    $response = get('/');

    $response->assertStatus(200);
});

Neue Funktionen von Pest

  • Architektur-Testing: Architecture Testing mit Pest ermöglicht es, die Struktur und Architektur ihrer Anwendung zu überprüfen. Ein Beispiel ist eine Prüfung der Enums im Namespace App\Enums die validiert dass alle Enums integer-basiert sind.

  • Parallelisierung, zur schnelleren Ausführung von Tests

  • Profiling, um langsame Tests zu identifizieren

  • Coverage, um die Code-Coverage zu ermitteln

  • Plugins, wie Livewire Watcher, um nur fehlgeschlagene Tests automatisch auszuführen sobald sich der Code ändert