Zurück zur Übersicht

Einrichten einer Testumgebung mit PHPUnit und WordPress, 1. Teil

1. Teil: Verwenden der github-Tests oder der offiziellen Testsuite via SVN.
2. Teil: Einrichtung einer Testumgebung mit WP-CLI.

Testgetriebene Entwicklung ist ein recht angesagtes Thema in Entwicklerkreisen, und langsam aber sicher wird diese Art der Code-Entwicklung auch im Zusammenhang mit WordPress populär. Da das Einrichten einer entsprechenden Umgebung einige Zeit aufbrauchen kann, sollen hier kurz drei Möglichkeiten beschrieben werden.

Wir richten unser Augenmark in diesem Artikel lediglich auf die Plugin-Entwicklung, doch natürlich können auch Themes mit dieser Methode getestet werden.

Derzeit gibt es mindestens 3 Möglichkeiten, eine lokale Entwicklungsumgebung mit WordPress und PHPUnit einzurichten:

  1. Wir verwenden die Tests unter https://github.com/nb/wordpress-tests. Diese Tests benötigen eine existierende WordPress-Installation, sind also praktisch, wenn wir zu einem bereits eingerichteten, lokalen WordPress-Projekt die Testklassen hinzufügen wollen.
  2. Wir laden per SVN die offizielle Test-Suite von http://develop.svn.wordpress.org/trunk/ herunter, wie in diesem Artikel beschrieben. Vorteil: haben wir die Entwicklungsumgebung noch gar nicht eingerichtet, ist das Verwenden des SVN-Trunks sehr praktisch, weil wir uns hier nicht nur die neueste WordPress-Version ziehen, sondern alle benötigten Testklassen bereits an Bord sind.
  3. Wir verwenden das Kommandozeilen-Werkzeug WP-CLI (für UNIX-basierte Betriebssysteme wie Linux oder Mac OS X). Dies beschreibe ich im nächsten Teil dieses Artikels.
Grundvoraussetzung für beide Methoden ist, dass PHPUnit installiert ist. Hierzu gibt es im Netz zahlreiche Installationsbeschreibungen, weshalb ich darauf nicht weiter eingehen werde.

 

Einrichten der WordPress-Tests in einer bestehenden Installation

Wir laden die Tests herunter: https://github.com/nb/wordpress-tests.
Die Dateien entpacken wir in unser Pluginverzeichnis, am Besten in einen eigenen Unterordner /tests.

Unsere Verzeichnisstruktur müsste wie folgt aussehen:

Bildschirmfoto vom 2013-09-09 13:47:16

Als nächstes öffnen wir mit unserem Editor oder unserem IDE die Datei unittests-config-sample.php, in der nicht nur der Pfad zu unserer WordPress-Installation, sondern auch die Verbindungsdaten zu unserer Testdatenbank festgelegt werden. Diese Datenbank werden wir im nächsten Schritt erstellen.
In der unittests-config-sample.php definieren wir den relativen Pfad zu unserem WordPress-Hauptverzeichnis:

Und als Nächstes tragen wir unsere MySQL-Verbindungsdaten ein:

Entwickeln wir beispielsweise ein netzwerkfähiges Plugin, so können wir in dieser Datei ebenfalls Multisite aktivieren:

Abschließend benennen wir die Datei unittests-config-sample.php in unittests-config.php um.

Nun muss die Test-Datenbank erstellt werden. Dies kann z.B. mit einem Werkzeug wie phpmyadmin erledigt werden. Wichtig ist lediglich, dass der Datenbankname demjenigen in der unittests-config.php entspricht – logisch, oder?

Ist die Datenbank angelegt, können wir im Verzeichnis /tests PHPUnit ausführen, um die Installation der Test-Suite zu starten:

Unsere Test-Datenbank ist damit angelegt, nun fehlt noch unsere individuelle Test-Klasse, um die ersten automatischen Tests ausführen zu können. Wir erzeugen hierfür eine neue Datei, welche wir im Plugin-Hauptverzeichnis ablegen. Nennen wir die Datei einfach einmal plugin-tests.php.

Um die WordPress-Tests verwenden zu können, muss unsere Test-Klasse diese zunächst einmal inkludieren, dies geschieht über die Datei bootstrap.php.

Danach definieren wir unsere Test-Klasse, die wir von der WP_UnitTestCase – Klasse ableiten:

Wir notieren ebenfalls die erste Methode der Klasse, setUp(). Diese Methode initialisiert u.a. die Datenbank und erstellt eine Instanz der Factory-Klasse, die wir später noch verwenden wollen.

Alles, was nun noch fehlt, ist unser erster Test! Beginnen wir mit etwas Simplem: das Überprüfen der Textdomain. Der Name der Methode, die den Test enthält, muss dabei zwingend mit test beginnen:

Nun haben wir eine verwendbare Test-Klasse. Wir wechseln zurück in die Konsole und führen erneut PHPUnit aus:

Hmm, wir erhalten einen Fatal Error. Der Grund ist recht einfach: zwar greift die Test-Suite auf unsere bestehende WordPress-Installation zurück. Doch die installierten Plugin holt sich WordPress aus der Datenbanktabelle _options. Unsere Test-Datenbank enthält noch keine Einträge zu aktivierten Plugins, dies müssen wir nachholen. Ich verwende dafür eine einfache Aktivierungs-Funktion, welche ich vor der Definition der Test-Klasse einfüge:

Hier also nochmal die gesamte plugin-tests.php:

Wir führen PHPUnit erneut aus:

 

Verwenden des SVN-Trunks

Wir holen uns die gesamte Testinstallation von http://develop.svn.wordpress.org/trunk/:

Dadurch erhalten wir folgende Verzeichnisstruktur:

Bildschirmfoto vom 2013-09-09 14:26:39

/src beinhaltet die aktuelle WordPress-Version, /tests werden wir als Verzeichnis für unsere eigene Test-Klasse verwenden.

Zunächst bearbeiten wir die Datei wp-tests-config-sample.php und tragen unsere Datenbank-Verbindungsdaten ein. Anschließend benennen wir die Datei in wp-tests-config.php um.

Im nächsten Schritt erzeugen wir, z.B. mit phpmyadmin, die Datenbank, die wir gerade in der Datei eingetragen haben.

Ist dies soweit geschehen, könnten wir die WordPress-Testsuite bereits ausführen, welche aus mehreren hundert Tests besteht und je nach Rechnerleistung einige Minuten zum Durchlaufen benötigt. Wir wollen jedoch unser Plugin testen und erstellen daher im Unterordner /tests die Datei plugin-tests.php. Diese Datei entspricht im Aufbau derjenigen, welche im oberen Teil des Artikels erstellt wurde, lediglich den Pfad zur bootstrap.php müssen wir anpassen:

Unser Test-Plugin erstellen oder kopieren wir in /src/wp-content/plugins/. Sobald es dort abgelegt ist, können wir im Hauptverzeichnis PHPUnit starten:

 
Weiter zum nächsten Teil: Einrichten einer Testumgebung mit WP-CLI.

Schreibe einen Kommentar