Verhaltensorientierte Entwicklung mit Behat

Bei der verhaltensorientierten Entwicklung (engl.: behavior driven development) schreibt man vom Menschen lesbare Abläufe, die das Verhalten der Anwendung beschreiben. Die Funktionalität des Programms kann dann automatisch mit diesen Abläufen getestet werden. Wir stellen Ihnen hier das Tool Behat vor, mit dessen Hilfe man genau dies in PHP umsetzen kann.

Angenommen es soll eine Funktion in einer PHP-Anwendung implementiert werden, welche die Summe aus zwei Zahlen ausgibt. Diese Funktionalität könnte man dann so beschreiben:

Wenn zwei Zahlen eingegeben werden, soll die Summe aus diesen beiden Zahlen ausgegeben werden.

Wäre es nicht fantastisch, wenn man diese Funktionalität einfach so aufschreiben könnte und diese dann ausgeführt und sogar getestet würde ? Genau das macht Behat. Doch zunächst müssen wir die Software auch installieren.

Installation

Der einfachste Weg Behat zu installieren, ist Composer zu nutzen. Erstellen Sie zunächst eine neue Datei mit dem Namen composer.json in Ihrem Projektverzeichnis und schreiben Sie dort folgendes hinein:

Anschließend muss Composer heruntergeladen werden. Wenn Sie Curl nutzen, geben Sie folgendes in Ihr Kommandozeilentool ein:

Sollte Curl bei Ihnen nicht funktionieren, können Sie Composer auch mit PHP herunterladen. Dazu geben Sie folgendes ein:

Falls Sie Windows nutzen, vergewissern Sie sich, dass der Pfad zu Ihrer php.exe in den Umgebungsvariablen unter PATH eingetragen wurde. Anschließend installieren Sie Composer mit folgendem Befehl:

Die Installation kann einige Sekunden dauern. Sollte alles geklappt haben, sehen Sie nun einen Ordner mit dem Namen bin in Ihrem Projektverzeichnis.
Auch den Pfad zu diesem Ordner müssen Windows-Nutzer in den Umgebungsvariablen unter PATH eintragen, damit Behat überall genutzt werden kann. Zum Schluss müssen Sie Behat noch mitteilen, dass es in Ihrem Projektverzeichnis initialisiert werden soll. Dies machen Sie mit folgendem Befehl:

Behat hat nun den Ordner features für Sie angelegt, in welchem wir nun im weiteren Verlauf arbeiten werden.

Funktionalität definieren

Bei der Nutzung von Behat fängt man stets damit an, eine Funktionalität zu definieren, welche mann dann beschreibt und implementiert. In unserem Beispiel geht es um eine Funktion, welche die Summe aus zwei Zahlen ausgibt. Wir erstellen also im Ordner features eine neue Datei mit dem Namen gebesummeaus.feature. Achten Sie auf die besondere Dateiendung. Diese ist immer .feature. Danach schreiben Sie folgendes in die Datei hinein:

Jede Funktionalität wird in diesem Format angegeben: eine erste Zeile, in der das Feature genannt wird und danach ein paar Zeilen, in denen es näher beschrieben wird. Dieser gesamte Absatz ist zwar zwingend notwendig, damit Behat funktioniert, jedoch hat der Inhalt und wie er geschrieben ist keine weitere Bedeutung für Behat oder das Testen. Davon abgesehen sollte es jedoch für Menschen gut lesbar sein. In unserem Fall nutzen wir Behat mit der deutschen Übersetzung. Dazu muss am Anfang der Datei # language: de eingetragen werden. Achten Sie auch unbedingt darauf, dass die Datei mit der Zeichenkodierung UTF-8 gespeichert wird.

Szenario definieren

Als nächstes tragen Sie in der gleichen Datei unter der Definition der Funktionalität das Szenario ein. Dies sollte in etwa so aussehen:

Jede Funktionalität wird durch ein oder mehrere Szenarien definiert, welche beschreiben, wie sich das Programm unter bestimmten Bedingungen verhalten soll. Diesen Abschnitt verwendet Behat dazu, die automatischen Tests zu erstellen. Achten Sie unbedingt darauf, die wichtigen Elemente in Anführungszeichen zu schreiben. Wir erklären später, warum das gemacht werden muss. Szenarien werden in Behat immer wie folgt dargestellt:

Alle Teile eines Szenarios können ausserdem durch die Schlüsselwörter Und und Aber erweitert werden:

Im Prinzip spielt es keine Rolle, welche dieser Schlüsselwörter Sie für was benutzen. Sie sind alle austauschbar und haben für Behat exakt die selbe Bedeutung. Hier geht es wieder um die bessere Lesbarkeit. Führen Sie nun Behat mit folgendem Befehl in Ihrem Projektverzeichnis aus:

Sie sollten nun folgende Ausgabe sehen können:

Schritte definieren

Behat sucht beim Ausführen automatisch nach Dateien im Ordner features mit der selben Endung und führt diese aus. Allerdings haben wir noch nicht festgelegt, was Behat nun mit den Statements in dieser Datei anfangen soll. Behat erstellt für jedes Statement im Szenario einen regulären Ausdruck, den mann dann noch anpassen kann. Diese regulären Ausdrücke werden anhand der Wörter oder Zahlen erstellt, die in Hochkommata stehen. Deshalb muss unbedingt an die Setzung derselben gedacht werden. Da Behat diese regulären Ausdrücke bereits für uns erstellt hat, kopieren wir den gesamten Teil mit den Funktionen und tragen sie in die Datei features/bootstrap/FeatureContext.php ein. Diese sollte danach in etwa wie folgt aussehen:

Schritte anpassen

Die einzelnen Schritte müssen nun nur noch an unsere Funktionalität angepasst werden. Am Ende könnte das Ganze dann ungefähr so aussehen:

Ausführung

Führen Sie nun wieder Behat aus und schauen Sie, was passiert. Wenn alles geklappt hat, erhalten Sie folgende Ausgabe:

Behat hat nun alle Schritte ausgeführt und das Ergebnis mit dem erwarteten Ergebnis vergleichen. Nachdem nun bereits einige Schritte angelegt wurden, ist es nun sehr einfach, noch weitere Szenarien zu erstellen, die diese Schritte auch verwenden und bei denen sich jeweils nur die Parameter ändern. Dazu schreiben Sie einfach weitere Szenarien im selben Format untereinander. Behat führt diese dann nacheinander aus.

Wir haben Ihnen nun gezeigt, wie einfach es ist, verhaltensorientiert mit Behat zu entwickeln und zu testen. Mit dieser Methode ist es möglich, einfache Anweisungen aufzuschreiben, die für Menschen gut lesbar sind und diese dann in Code umzusetzen. Wenn Sie genau so viel Gefallen daran gefunden haben, wie wir, scheuen Sie sich nicht, dieses Tool auch in Ihrem Projekt zu verwenden. Wir wünschen Ihnen viel Spaß dabei.

0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Schreibe einen Kommentar

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