Was ist PHPUnit und warum wird es benötigt?
\n\nPHPUnit ist ein Framework für das Modultesten (Unit Testing) in der Sprache PHP. Es gehört zur xUnit-Familie und bietet Entwicklern Werkzeuge zur Automatisierung der Überprüfung der Funktionsfähigkeit einzelner Programmkomponenten (Klassen, Methoden, Funktionen).
\n\nWarum wird PHPUnit benötigt?
\n- \n
- Früherkennung von Fehlern: Tests werden nach jeder Codeänderung ausgeführt und ermöglichen es, Regressionen sofort zu erkennen. \n
- Code-Dokumentation: Gut geschriebene Tests dienen als lebendige Dokumentation und zeigen, wie eine bestimmte Methode funktionieren soll. \n
- Refactoring ohne Angst: Sie können Code bedenkenlos umschreiben, in dem Vertrauen, dass die Tests die vorhandene Funktionalität nicht beschädigen lassen. \n
- Unterstützung von TDD (Test-Driven Development): Testgetriebene Entwicklung – eine Methodik, bei der zuerst ein Test und dann der minimale Code geschrieben wird, um ihn zu bestehen. \n
- Integration mit CI/CD: PHPUnit lässt sich leicht in Continuous-Integration-Pipelines (GitHub Actions, GitLab CI, Jenkins) einbinden. \n
PHPUnit unterstützt Mocks (Mock-Objekte), Fixtures (Testdatensätze), Code Coverage und viele weitere erweiterte Funktionen.
\n\nInstallation von PHPUnit
\n\nPHPUnit wird über Composer installiert – den Abhängigkeitsmanager für PHP. Falls Sie Composer noch nicht haben, installieren Sie es von der offiziellen Website getcomposer.org.
\n\nGlobale Installation (für CLI empfohlen)
\ncomposer global require phpunit/phpunit\n\nStellen Sie danach sicher, dass das globale Composer-Paketverzeichnis zum PATH hinzugefügt wurde. Überprüfen Sie die Installation:
\nphpunit --version\n\nLokale Installation (innerhalb des Projekts)
\ncomposer require --dev phpunit/phpunit\n\nDanach ist PHPUnit über vendor/bin/phpunit verfügbar.
Installation einer bestimmten Version
\ncomposer require --dev phpunit/phpunit:^10.0\n\nWichtig: Die PHPUnit-Version muss mit der PHP-Version in Ihrem Projekt übereinstimmen. Beispielsweise benötigt PHPUnit 10 PHP 8.1 oder höher.
\n\nSchnellstart mit einem Codebeispiel
\n\nErstellen wir eine einfache Klasse Calculator.php und schreiben Tests dafür.
Schritt 1. Erstellen der zu testenden Klasse
\n<?php\n// src/Calculator.php\n\nclass Calculator\n{\n public function add(int $a, int $b): int\n {\n return $a + $b;\n }\n\n public function subtract(int $a, int $b): int\n {\n return $a - $b;\n }\n\n public function multiply(int $a, int $b): int\n {\n return $a * $b;\n }\n\n public function divide(int $a, int $b): float\n {\n if ($b === 0) {\n throw new \\InvalidArgumentException("Division by zero");\n }\n return $a / $b;\n }\n}\n\nSchritt 2. Erstellen der Testklasse
\n<?php\n// tests/CalculatorTest.php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n private Calculator $calculator;\n\n protected function setUp(): void\n {\n $this->calculator = new Calculator();\n }\n\n public function testAdd(): void\n {\n $result = $this->calculator->add(2, 3);\n $this->assertEquals(5, $result);\n }\n\n public function testSubtract(): void\n {\n $result = $this->calculator->subtract(10, 4);\n $this->assertEquals(6, $result);\n }\n\n public function testMultiply(): void\n {\n $result = $this->calculator->multiply(3, 4);\n $this->assertEquals(12, $result);\n }\n\n public function testDivide(): void\n {\n $result = $this->calculator->divide(10, 2);\n $this->assertEquals(5.0, $result);\n }\ Auch in der Bibliothek
Arbeiten mit ZIP-Archiven in Node.js: vollständige Anleitung
Standard-Java-Bibliothek: Vollständiger Überblick für Anfänger und Profis
Swagger/OpenAPI-Generierung für Java: Die besten Bibliotheken
Vavr Java: Vollständige Anleitung mit Code-Beispielen
yaml-cpp für C++: Komplette Anleitung mit Beispielen