PHPUnit-Tests: Ersterfahrung

PHPUnit-Tests gibt es schon seit über 20 Jahren. Bisher haben wir aber für unsere Entwicklungen eher auf „klassische“ Tests gesetzt. Heißt: Wir haben eine Software geschrieben und diese dann auf einem Testsystem „live“ ausprobiert. Um unsere Softwarequalität aber zu steigern und gleichzeitig Programmierstandards zu pflegen haben wir beschlossen in Zukunft bei der PHP-Entwicklung auch auf PHPUnit-Tests zu setzen. Ein erster Erfahrungseinblick.

Ausgangssituation

Wir hatten sowieso gerad ein neues Projekt am Start – diesmal wieder die Entwicklung eines WordPress-Plugins – und Ende letzten Jahres gerade auf der betterCode()-Konferenz für den Bereich PHP nochmal oder wieder von PHPUnit als „Test-Suite“ gehört. Da ja Stillstand bekanntlich den Tod bedeutet haben wir also mutig beschlossen, unsere Softwarequalität mithilfe dieses Tools einmal gehörig voranzubringen.

Natürlich behalten wir auch unsere bisherige Testmodalität mit der Testinstallation bei. Schließlich soll ja auch das Aussehen und die Funktionalität im Browser getestet werden. Die PHPUnit-Tests werden wir aber zukünftig verstärkt einsetzen um bereits vorab generelle Tests aufzubauen, die einfach verhindern, dass wir schon mit ganz rudimentären Fehlern an den Start gehen, wie z.B. ein vergessenes Semikolon am Ende oder eine zu viel geöffnete oder geschlossene Klammer…

Also wir hatten ein brandneues Projekt mit ohne irgendwas. Lokal haben wir einen Apache am Laufen und auch einen MariaDB-Server. Etwas googlen brachte uns dann noch den Hinweis, das es auch für WordPress eine Art „development“ Zweig gibt, mit dem man dann auch in PHPUnit testen können soll. Gesagt getan…

Einrichten und erst mal Testen der Testumgebung

Ja richtig: Bevor man sowas nutzen kann muss man das ja erst mal einrichten. Wir haben also erstmal das WordPress-Verzeichnis hingestellt und dann ging der Spaß auch schon los: Zum Einrichten hat uns das große Internet verraten, dass wir vermittels npm und grunt das ganze so aufsetzen können, dass es für unsere Unit-Tests läuft. Das war aber mal gar nicht so einfach. Es gab node und npm aber wir mussten zunächst die Pfade in die Umgebungsvariablen bringen bzw. verbessern, da node und npm ursprünglich über Visual Studio (manchmal entwickeln wir auch in C# ;))  auf das System kam und in dem Ordner noch nicht anständig wollte. nachdem wir das soweit hatten und auch alles sauber loslief, haben wir ins passende Plugin-Verzeichnis unser neues „Plugin“ kopiert und dann einen Ordner Tests angelegt.

PHPUnit-Tests – jetzt aber!?

Um erst mal warm zu werden haben wir erst mal ganz einfache Tests geschrieben. Wir wollten zunächst nur prüfen, ob unser Plugin aktiviert wurde, einen Menüeintrag im Adminmenu erzeugt und die Adminseite im Ansatz beim Aufruf der URL irgendwas an Inhalt erzeugt. Da kam aber schon die erste Frage in uns auf: Wie aktiviert man denn ein Plugin, wenn man gerade nicht die WordPress-typische Pluginseite vor der Nase hat? Etwas knifflig. Wir befragten also wieder das Internet und dort hieß es: Einfach in der Datenbank in den Optionen das Plugin unter den aktivierten Plugins mit eintragen. Ok – also auf die lokale DB mittels phpMyAdmin gegangen und: Die Datenbank ist ja leer? Moment – wir hatten doch vorhin mittels npm und grunt das ganze „installaliert“? Offenbar gereicht diese „Installation“ aber nicht soweit, dass auch eine DB ordentlich angelegt wird. Das Internet riet dazu, aus einer anderen frischen WordPress-Installation einfach die WordPress-eigenen Tabellen zu importieren. Gut also auch das erledigt.

Jetzt aber zu den Tests? Noch nicht ganz. Unser geschriebener Test hatte als erstes Problem das die Ausgabe bereits erzeugt wurde, bevor das PHPUnit-Testgebilde seine Ausgabe gestartet hat. Ein klassisches Problem von Output vor den Headern. Aber auch sonst gab es haufenweise Probleme. Es genügte nicht die wp-load.php einzubinden und ggf. noch die wp-config. Es musste tatsächlich für alle benötigten Funktionen jeweils die passende wp-* Datei eingebunden werden in die Testklasse.

Erstes Fazit

Naja so ganz zufrieden sind wir mit den Bedingungen noch nicht. Eigentlich war nicht der Plan, alle Dateien „manuell“ einzubinden nur um dann einen Test fahren zu können. Der Plan war, eine Art WordPress-Instanz zu haben, in der man dann vielleicht noch mittels einfacher Hooks oder ähnlichem die benötigten Seiten und Eigenschaften aufrufen kann. Das hat bisher noch nicht geklappt. Aber vielleicht finden wir auch dafür demnächst nochmal eine etwas charmantere Konfiguration. Wir lernen ja noch… Und ach ja: Die Tests sind am Ende erfolgreich verlaufen. 😉

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert