© saicle/Shutterstock.com
Kolumne: Quality Time

Kolumne: Quality Time


Unit Tests gehören mittlerweile zum guten Ton jedes PHP-Projekts. Doch sie bringen lediglich die technische Korrektheit einer Software voran. Ob das programmierte auch dem entspricht, was der Project Owner sich vorstellt, steht auf einem anderen Blatt. Ansätze aus dem Bereich des Domain-driven Designs (DDD) [1] versuchen solche Kommunikationsprobleme an der Schnittstelle zwischen Auftraggebern und Technikern auszumerzen. Hierzu zählt auch die Methodik des Behavior-driven Developments (BDD) [2]: Von Menschen lesbare Akzeptanzszenarien werden als Testfälle ausführbar gemacht, um das gewünschte Verhalten der Applikation zu validieren.

Mit Behat [3] steht der PHP-Welt ein passendes Tool zur Verfügung, um diese Methodik anzuwenden. Daneben bietet es eine nützliche Plattform für verschiedene Arten von Funktions- und Systemtests.

Scenario: If there are no CFPs, I see an empty list. Given there are no CFPs When I view "CFP Listing" Then I see 0 CFPs listed

Das sieht auf den ersten Blick aus wie eine rudimentäre User Story. Allerdings ist nur die erste Zeile Fließtextdokumentation, die weiteren drei Zeilen werden durch Behat zu ausführbarem Code. Und genau darin liegt der Charme: Der Auftraggeber des Projekts kann die so notierte Spezifikation lesen, verstehen und mit den Entwicklern diskutieren. Anschließend dient die abgesegnete Spezifikation als Testfall, um sicherzustellen, dass die Anwendung die Geschäftsanforderung auch erfüllt.

Natürlich kann Behat solchen Text nicht auf Anhieb verstehen. Deshalb muss, um einen solchen Testfall ausführbar zu machen, jeder verwendete Satz mit Code verknüpft werden, der den gewünschten Effekt in der Applikation erzeugt. Das kann beispielsweise so aussehen:

class ListingFeatureContext extends BehatContext { // ...  /**   * @Given /^there are no CFPs$/   */  public function thereAreNoCfps() { $this->cleanupDatabase(); } }

Zur Integration des eigenen Testcodes in Behat wird die Klasse BehatContext erweitert. In einem solchen Context ist es mithilfe von Annotationen und regulären Ausdrücken möglich, einen Satz mit einer Methode zu verknüpfen. Immer wenn Behat den entsprechenden Satz in einem Testszenario findet, führt es die passende Methode aus. Hier wird also beispielsweise die Testdatenbank geleert, wenn der Satz „Given there are no CFPs“ auftaucht.

Das Beispiel ist aus Platzgründen nur sehr rudimentär. Behat bietet viele weitere Features wie Parameter in Sätzen, Beispieltabellen und modulare Erweiterungen. Eine davon basiert ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang