Unit-Testing-Framework: PHPUnit 10 setzt Version 8 der Programmiersprache voraus
PHPUnit 10 setzt die Aufräumarbeiten fort und soll voraussichtlich am 4. Februar 2022 erscheinen. Autor Sebastian Bergmann verrät weitere Details.
Version 10 des PHP-Testing-Frameworks PHPUnit hätte eigentlich schon im Februar 2021 verfügbar sein sollen. Im Gespräch mit heise Developer erklärt Sebastian Bergmann, warum das Release nach wie vor aussteht und was Entwicklerinnen und Entwickler von PHPUnit 10 erwarten können. Sebastian Bergmann ist nicht nur Maintainer des Frameworks, sondern auch Mitgründer und Principal Consultant von The PHP Consulting Company (thePHP.cc).
heise Developer: PHPUnit 10 sollte im Februar 2021 erscheinen. Warum dauert das Update nun doch länger als geplant?
Sebastian Bergmann: Das stimmt: Wie schon seit Jahren üblich, hätte am ersten Freitag im Februar 2021 eine neue Major Version von PHPUnit erscheinen sollen. Ein solches Update bietet jährlich eine Gelegenheit zum Aufräumen. Neue Funktionalität wird meistens in Minor-Versionen umgesetzt, beispielsweise in PHPUnit 10.1 bis PHPUnit 10.5, die am jeweils ersten Freitag im April, Juni, August, Oktober und Dezember erscheinen. Leider konnten wir diesen Plan dieses Mal nicht erfüllen.
Vor der Pandemie habe ich meist auf Reisen an Open Source gearbeitet: im Flugzeug, im Zug, auf dem Flughafen oder im Hotel. Das war eine Win-win-Situation, da mir die Arbeit an Open Source dabei half, die Zeit zu überbrücken – beispielsweise auf einem Langstreckenflug. Vor der Pandemie habe ich für unsere (thePHP.cc-)Kunden fast ausschließlich vor Ort gearbeitet. Das heißt, wenn ich nach Hause kam, war ich zu Hause, und nicht bei der Arbeit. Seit der Pandemie bin ich immer zu Hause, was schön ist. Aber ich bin eben auch immer bei der Arbeit, was nicht immer schön ist. Ich werde zunehmend besser darin, mit diesen Veränderungen umzugehen. Aber zumindest eine Zeit lang konnte ich während der Pandemie einfach nicht die Energie aufbringen, um an Open Source zu arbeiten. Um diese Energie wiederzufinden, waren regelmäßige Videotreffen sowie Mob Programming mit Andreas Möller, Ewout Pieter den Ouden und Arne Blankerts sehr wichtig für mich.
Vor der Pandemie hatten wir auf einem von der Europäischen Union ausgerichteten Hackathon damit begonnen, ein neues System für die Erweiterung von PHPUnit zu entwickeln. Die Arbeit an diesem Event-System wurde maßgeblich von Arne Blankerts und Andreas Möller vorangetrieben. Es wurde uns schnell klar, dass wir dieses System unbedingt in PHPUnit 10 haben wollten. Bedingt durch die Pandemie und ihre Auswirkungen auf unser aller Leben und Arbeit hat die Entwicklung des Event-Systems leider länger gedauert als ursprünglich gedacht.
Status Quo
heise Developer: Was ist der aktuelle Stand der Entwicklung? Wann planst du die Veröffentlichung der 10. Major Version?
Bergmann: Das schon erwähnte neue Event-System zur Erweiterung von PHPUnit wurde schon vor einiger Zeit in den Entwicklungszweig für PHPUnit 10 gemerged. Nach dem bewährten Prinzip "Eat your own dog food" sind wir derzeit dabei, den PHPUnit-internen Code, der bislang die TestListener
-Schnittstelle und die ResultPrinter
-Klassen verwendet, so zu überarbeiten, dass stattdessen das Event-System verwendet wird. Indem wir uns zwingen, Events sowohl für die Konsolenausgabe als auch für das Schreiben von Logfiles zu verwenden, entdecken wir fehlende oder missverständliche Events frühzeitig. Die Arbeit am Event-System hat sich auf die gesamte Codebasis ausgewirkt. Auf diese Weise konnten wir viele technische Schulden endlich tilgen. Die Suche nach den richtigen Stellen für das Auslösen der entsprechenden Events hat zahllose zuvor verborgene Ungereimtheiten und Probleme aufgedeckt. Letztlich haben wir für PHPUnit 10 deutlich mehr Arbeit und Zeit in das Aufräumen und Verbessern der Implementierung von PHPUnit investiert. Das wird sich langfristig für alle auszahlen: für diejenigen, die an PHPUnit arbeiten ebenso wie für diejenigen, die Erweiterungen für PHPUnit wie Infection oder Pest entwickeln.
Darüber hinaus war einiges an Arbeit notwendig, um neue PHP-Features wie Union Types oder Intersection Types in aktuellen PHPUnit-Versionen zu unterstützen sowie ältere PHPUnit-Versionen mit neuen PHP-Versionen kompatibel zu machen. Für letzteres gibt es nun den sogenannten Life Support: Änderungen an einer ansonsten nicht unterstützten Version von PHPUnit werden vorgenommen, um sie mit neuen Versionen der Programmiersprache kompatibel zu machen, solange das machbar ist.
Ich hoffe, dass ich PHPUnit 10 am 4. Februar 2022 veröffentlichen kann. Allerdings kann ich nur versprechen, mich sehr darum zu bemühen. Ich kann nicht versprechen, dass die neue Version bis dahin fertiggestellt sein wird. Am Ende des Tages gilt immer noch "it's ready when it's ready".