TDD in PHP: Wie Tests Code in Kunst verwandeln

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

Einleitung: Warum dein Code Respekt verdient (und Tests)

\n\n

Stell dir vor: Du schreibst Code, er funktioniert, alles läuft. Aber einen Monat später kehrst du zum Projekt zurück, fügst eine neue Funktion hinzu – und plötzlich geht alles kaputt. Kommt dir bekannt vor? Wenn ja, dann ist TDD in PHP genau das Richtige für dich. Testgetriebene Entwicklung (Test-Driven Development) ist nicht nur ein Trend, sondern eine Philosophie, die deine Einstellung zu Code verändert. In diesem Artikel zeigen wir dir, wie TDD Chaos in Ordnung verwandelt und Bugs zu Relikten der Vergangenheit macht. Du lernst, wie du PHP-Tests schreibst, die wirklich Zeit sparen, und siehst das anhand von Codebeispielen. Los geht's!

\n\n

Was ist TDD und warum brauchst du es in PHP?

\n\n

TDD in PHP ist eine Methodik, bei der du zuerst einen Test schreibst und dann den Code, der diesen Test besteht. Klingt seltsam? Es ist genial. Statt zu raten, ob dein Code funktioniert, erhältst du sofortiges Feedback. Die Grundprinzipien von TDD:

\n\n
    \n
  • Rot – Schreibe einen Test, der fehlschlägt (weil der Code noch nicht existiert).
  • \n
  • Grün – Schreibe den minimalen Code, damit der Test besteht.
  • \n
  • Refactoring – Verbessere den Code, ohne die Tests zu brechen.
  • \n
\n\n

Dieser Zyklus wiederholt sich immer wieder. In PHP ist TDD besonders nützlich, da die Sprache oft für Webanwendungen verwendet wird, bei denen Fehler teuer sein können. Tests mit PHPUnit (dem wichtigsten Test-Framework) helfen, Regressionen zu vermeiden und machen den Code transparent. Außerdem diszipliniert TDD: Du denkst über das Design nach, bevor du Code schreibst.

\n\n

Testumgebung für PHP einrichten

\n\n

Bevor wir in die Beispiele eintauchen, bereiten wir die Umgebung vor. Für die testgetriebene Entwicklung mit PHP benötigen wir PHPUnit. Die Installation ist einfach:

\n\n
composer require --dev phpunit/phpunit ^10
\n\n

Erstelle einen Ordner tests im Projektverzeichnis. Darin die Datei CalculatorTest.php. Stelle sicher, dass PHP 8.0+ installiert ist. Jetzt ist alles bereit für den ersten Test.

\n\n

Erster Test: Einen Taschenrechner mit TDD schreiben

\n\n

Lass uns einen einfachen Taschenrechner erstellen. Zuerst der Test. Das ist ein klassisches Beispiel für TDD für PHP-Anfänger.

\n\n

Schritt 1: Rot (fehlschlagenden Test schreiben)

\n\n

Erstelle tests/CalculatorTest.php:

\n\n
<?php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n    public function testAddition()\n    {\n        $calculator = new Calculator();\n        $result = $calculator->add(2, 3);\n        $this->assertEquals(5, $result);\n    }\n}
\n\n

Führe den Test aus:

\n\n
./vendor/bin/phpunit tests/CalculatorTest.php
\n\n

Erwarte einen Fehler: Class "Calculator" not found. Alles nach Plan – das ist die rote Phase.

\n\n

Schritt 2: Grün (minimalen Code schreiben)

\n\n

Erstelle src/Calculator.php:

\n\n
<?php\n\nclass Calculator\n{\n    public function add(int $a, int $b): int\n    {\n        return $a + $b;\n    }\n}
\n\n

Vergiss nicht, die Autoloading-Datei im Test einzubinden:

\n\n
require_once __DIR__ . '/../src/Calculator.php';
\n\n

Führe den Test erneut aus – grün! Jetzt kommt das Refactoring. In diesem Schritt ist der Code einfach, aber später kannst du ihn verbessern, ohne Angst vor Fehlern zu haben.

\n\n

Schritt 3: Refactoring mit Zuversicht

\n\n

Angenommen, wir möchten eine Typprüfung hinzufügen. Ändere den Code:

\n\n
public function add(int $a, int $b): int\n{\n    if (!is_int($a) || !is_int($b)) {\n        throw new InvalidArgumentException('Only integers allowed');\n    }\n    return $a + $b;\n}
\n\n

Führe die Tests aus – sie bestehen immer noch. TDD gibt dir den Mut zu experimentieren.

\n\n

Fortgeschrittenes TDD: Arbeiten mit Exceptions und Mocks

\n\n

Sobald du die Grundlagen beherrschst, gehe zu komplexeren Szenarien über. Zum Beispiel das Testen von Ausnahmen. In PHP Unit Tests ist das

Blogs

Buchempfehlungen