Wie testet man neue Software-Funktionen? Welche Rolle spielt Unit Testing bei der Entwicklung und Weiterentwicklung von WordPress. Über diese und andere Fragen sprachen wir mit Thorsten Frommen. Er ist Entwickler, ein sehr engagiertes Mitglied der WordPress-Community und ein Spezialist für Unit Testing.
GoDaddy: Thorsten, viele kennen den Begriff Unit Testing nicht. Sie wissen nicht genau, was sich dahinter verbirgt. Kannst du uns mehr etwas dazu sagen?
Thorsten: Ja, kann ich machen. Im Prinzip kann man sagen: Unit Testing ist dynamisches Testing von einzelnen Einheiten in Isolation. Dynamisches Testen heißt: Wir haben unseren Code und führen diesen wirklich aus. Wir lesen denn nicht nur, wie bei einer statischen Analyse, wir führen den Code wirklich aus. Wir testen dabei nur einzelne Stücke von diesem Code, also nicht die Software im Ganzen. Wenn ich eine Webseite habe, teste ich nicht alles, was es gibt, sondern Einheiten. So eine Einheit ist meistens eine Funktion – oder, wenn ich Klassen habe - eine Methode davon. Und das Wichtige ist, dass diese Einheiten in Isolation getestet werden. Das heißt: wenn zum Beispiel eine Funktion andere Dinge benötigt, gebe ich diese anderen Dinge nicht an die Funktion weiter. Denn wenn das Logik ist, könnte da auch ein Fehler drin sein. Ich gebe vielmehr normale Werte weiter, zum Beispiel Zahlen oder irgendwelche Strings oder so. Und nur diese eine Funktion ist echter Code, den ich ausführe. Und damit mache ich meine Tests. Im Prinzip ist das das Unit Testing.
GoDaddy: Unit Testing im Umfeld von WordPress
Thorsten: Was hat Unit Testing damit zu tun? Was hat WordPress damit zu tun? An sich erstmal nicht viel, denn es gibt für den WordPress Core keine Unit Tests. Die Tests, die wir für WordPress haben, sind eher Interaktions-Tests. Bei Gutenberg ist es anders: Gutenberg, der neue WordPress-Editor, hat quasi als Plugin angefangen, ist immer noch ein Plugin und wird auch so weiterentwickelt. Dann wird das, was released wurde, irgendwann in WordPress integriert. Da gibt es viele, viele verschiedene Tests, unter anderem auch Unit Tests.
Man kann und sollte jede Art von Software testen und auch unit-testen. Deshalb ist es auf jeden Fall für WordPress interessant, relevant und wichtig. Unit-Testing ist auch etwas, mit dem sich alle Plugin- und Theme-Autoren beschäftigen sollte – wenn nicht sogar etwas, das man durchführen sollte.
GoDaddy: Was sind die besonderen Herausforderungen beim Unit Testing? Ist es die Definition der funktionalen Einheiten, die man testen möchte?
Thorsten: Das ist eine Sache. Beim Testen allgemein geht es eher darum, dass man immer überlegt: Wie sieht es mit dem Kosten-Nutzen Verhältnis aus? Welchen Aufwand hat man, diesen Test zu schreiben? Was sind diese Tests wert? Das heißt: Es gibt in jedem Software-Bereich risikobehaftete funktionale Einheiten und etwas, das nicht so schlimm ist, wenn es mal nicht funktioniert.
GoDaddy: Kritische Funktionen zum Beispiel
Thorsten: Richtig: kritische Funktionen. Dabei geht es jetzt zum Beispiel nicht konkret um Unit Testing, sondern um Testing allgemein.
Wenn ich einen Online-Shop habe, ist wahrscheinlich der gesamte Checkout-Prozess wichtig. Dass in der Produkt-Einzelansicht irgendwo die Bullet Points blau sind, wenn sie sonst immer blau sind, ist natürlich schön. Wenn das nicht so sein sollte, ist das allerdings nur ein Designfehler. Es hat aber nichts mit den wichtigen Abläufen zu tun, zum Beispiel, dass Leute in meinem Shop Produkte suchen und bestellen können und ich Geld verdiene.
Das führt uns zu der Frage: Mit wie vielen verschiedenen Tests muss oder sollte ich die verschiedenen Bereiche meiner Software checken?
Wichtig ist auch, dass ich, wenn irgendwelche Fehler aufgetreten und ich diese gefixed habe, dafür wieder einen Test schreibe. Das sind sogenannte Regressionstests. Das heißt: Das sind mehr oder weniger Tests, an die ich vorher nicht gedacht habe, sondern die nach und nach auftauchen, weil einfach ein Fehler aufgetreten ist. Der wurde gefixt. Jetzt muss ich sicherstellen, dass er nicht mehr da ist und das stelle ich wieder durch einen Test sicher.
GoDaddy: Das ist praktisch eine Qualitätsprüfung
Thorsten: Genau.
GoDaddy: Gibt es bestimmte Tools, die du für das Unit Testing einsetzt?
Thorsten: Auf jeden Fall. Allgemein für Testing braucht man ein Testing-Frameworks, einen Test-Runner oder sowas. Das ist quasi die Software, die die Tests, die man schreibt, einfach ausführt. Die macht so eine Art Reporting. Sie führt zum Beispiel fünf Tests aus und sagt dann: vier von fünf Test waren erfolgreich und einer ist fehlgeschlagen - mit dem und dem Fehler.
Für PHP ist PHPUnits das bekannteste Testing Framework.
Dann nutze ich noch Mockery und Brain Monkey.
Das sind Bibliotheken, die ich brauche, um in meinen Test Objekte für den Test bereitzustellen.
Mockery und Brain Monkey sind dazu da, dass ich irgendwelche Fake-Objekte erstelle.
Wie ich ja eben schon gesagt habe: Man testet immer nur eine Einheit in echt. Ich habe nur von einer einzigen Einheit den echten Code. Ich muss der Funktion aber trotzdem das geben, was sie möchte. Und daher erstelle ich diese Dummy- oder Fake-Objekte mit Mockery oder Brain Monkey.
Für Java Script ist es dann das Java Skript Testing-Tool Jest.
Das ist der Test-Runner, den ich benutze.
Vor 1 – 2 Jahren war ich noch bei Tape. Das ist ein super einfaches, nicht umfangreiches Tool, das aber eigentlich alles bietet, was man braucht.
Jetzt bin ich bei Jest, weil es einfach der Stand der aktuellen Technik ist und Jest auch noch viel mehr bietet, als nur den Test-Runner. Trotzdem nimmt man zum Beispiel noch den React Testrunner, wenn man nicht nur allgemein JavaScript, sondern speziell React oder Gutenberg oder so etwas testen möchte.
Hin und wieder benötige ich noch spezielle Sachen für irgendeine Software. Wenn ich jetzt bei JavaScript irgendwas mit Redux habe, das ist quasi mein State Management, dann gibt es dafür spezielle Tools, die mir Tests schreiben bzw. vereinfachen.
Im Prinzip sind das so die Tools, die jeder kennen und nutzen sollte.
GoDaddy: Sind deine Unit Tests Auftragsarbeiten? Kommen zum Beispiel Plugin-Entwickler auf dich zu und sagen: Hier, wir haben ein neues Plugin. Teste das doch bitte mal.
Thorsten: Nein, das hatten wir bisher noch nicht. Privat nicht und auch beruflich nicht. Eher ist es der Fall, dass man etwas neu schreibt oder etwas, was vorhanden ist, erweitert oder „refactored“ oder so und dann eben auch mit Tests versieht. Dass etwas schon als Produkt komplett fertig ist und dann quasi von jemandem gefragt wird: „Ich hätte da gerne einen Test dafür“, das habe ich jetzt so noch nicht gehabt. Das ist im Workflow so auch nicht vorgesehen.
Einen Test schreiben ist keine Sache, die man mal eben so macht. Das muss geplant werden. Wenn man das plant, dann schreibt man die Software auch ein bisschen anders, weil man weiß, worauf man achten muss. Das heißt, man kann Sachen im Nachhinein testen, aber das ist nicht der richtige Weg, das ich nicht die geeignete Reihenfolge.
GoDaddy: Man sollte schon in der Entwicklungspahse bestimmte Steps für Unit-Tests vorsehen?
Thorsten: Am besten sogar davor. In der Konzeptionsphase weißt ich schon, dass ich bestimmte User Stories schreibe. Meine Userstory ist dann die Grundlage für Tests der ganzen Software. Und je weiter ich die Entwicklung angehe, habe ich dann weitere Arten von Tests, wo ich dann später verschiedene Tests über Teile der Software laufen lasse.
GoDaddy: Vielen Dank für die Einblicke in den Bereich des Unit-Testings.
Hier findest du weitere Video-Interviews mit WordPress-Experten
- WordPress Updates automatisieren mit ASMP – Videointerview mit Alain Schlesser
- Wie sieht die Zukunft von WordPress aus? Videointerview mit Konstantin Obenland
- Wie funktioniert Remote Management für externe WordPress Seiten? – Videointerview mit Jan Löffler
- Wie erstellt man mehrsprachige WordPress-Seiten? Videointerview mit Pascal Birchler
- WordPress Enterprise Lösungen mit Gutenberg – Videointerview mit Robert Windisch
- Wie testet man neue WordPress-Funktionen? – Videointerview mit Thorsten Frommen
- Wie sichert man ein Content Management System? – Videointerview mit David Jardin
- Wie wird man Teil des WordPress Projekts? Videointerview mit Birgit Olzem
- Wie sichert ihr WordPress-Kundenseiten? Videointerview mit Jonas Hellwig
- Was sind Custom Elements? – Videointerview mit Felix Arntz