Wenn Code die Sprache des Geschäfts spricht: Einführung in BDD
Stellen Sie sich folgende Situation vor: Sie haben ein aus code-technischer Sicht perfektes Zahlungsmodul geschrieben. Alle Methoden funktionieren, Ausnahmen werden behandelt, die Codeabdeckung durch Unit-Tests beträgt 99%. Sie öffnen den Champagner, aber der Manager kommt und sagt: „Warum wird bei uns das Geld abgebucht, bevor die Bestellung bestätigt ist?“ Und Sie verstehen – der Fehler liegt nicht im Code, sondern im Verständnis der Aufgabe.
Kommt Ihnen das bekannt vor? Genau für solche Fälle gibt es BDD (Behaviour-Driven Development) – die verhaltensgesteuerte Entwicklung. Es ist nicht nur eine weitere Methodik, sondern eine Brücke zwischen „Ich will, dass es funktioniert“ und „Wie setze ich das in PHP um?“. Wenn Sie es leid sind, nach jeder Präzisierung der Anforderungen die Logik umzuschreiben, ist dieser Artikel genau das Richtige für Sie.
In diesem Material werden wir uns ansehen, wie man BDD in PHP mit dem Framework Behat implementiert, echte Tests schreibt und versteht, warum dies den Code sauberer und die Kommunikation transparenter macht.
Was ist BDD und wie unterscheidet es sich von TDD?
Viele verwechseln Behaviour-Driven Development mit dem üblichen TDD (Test-Driven Development). Und tatsächlich ähneln sie sich äußerlich: In beiden Fällen werden zuerst Tests geschrieben. Der Unterschied liegt jedoch im Fokus.
- TDD dreht sich um „Wie überprüfe ich, ob eine Funktion die richtige Zahl zurückgibt?“. Tests werden in der Sprache des Programmierers geschrieben: assert, equals, mock.
- BDD dreht sich um „Wie verhält sich das System in einer bestimmten Geschäftssituation?“. Szenarien werden in einer natürlichen, fast menschlichen Sprache geschrieben.
Die Kernidee von BDD in PHP ist die Verwendung einer einheitlichen Sprache für die Kommunikation. Entwickler, Tester und Manager lesen dasselbe Szenario. Und wenn dort steht „Der Benutzer fügt ein Produkt ohne Anmeldung in den Warenkorb“, dann verstehen alle das Gleiche darunter.
Werkzeuge: Behat und Gherkin
In der PHP-Welt ist das wichtigste Werkzeug für BDD Behat. Es ist ein Framework, das Szenarien in der Sprache Gherkin parst und in ausführbare Tests umwandelt. Gherkin ist eine einfache englische (oder deutsche) Sprache mit Schlüsselwörtern: Feature, Scenario, Given, When, Then.
Lassen Sie uns Behat in Ihrem PHP-Projekt installieren:
composer require --dev behat/behat behat/mink-extension behat/mink-goutte-driverNach der Installation initialisieren wir das Projekt:
vendor/bin/behat --initDie Struktur sieht dann so aus:
features/ bootstrap/ FeatureContext.php your_feature.featurebehat.ymlUnser erstes BDD-Szenario in PHP schreiben
Angenommen, wir haben einen Online-Shop. Geschäftsanforderung: „Ein registrierter Benutzer kann ein Produkt in den Warenkorb legen und den Gesamtbetrag sehen.“ Erstellen wir die Datei features/cart.feature:
Feature: Warenkorb des Käufers Als registrierter Benutzer möchte ich Produkte in den Warenkorb legen um den Endpreis zu sehen
Scenario: Hinzufügen eines Produkts Given ich mich als Benutzer "ivan@example.com" auf der Website anmelde And auf der Katalogseite gibt es das Produkt "Laptop" für 50000 Rubel When ich auf "In den Warenkorb" für das Produkt "Laptop" klicke Then sehe ich die Meldung "Produkt hinzugefügt" And der Gesamtbetrag des Warenkorbs beträgt 50000 RubelBeachten Sie: Dieses Szenario kann jeder Manager ohne PHP-Kenntnisse lesen. Für Behat ist es jedoch ein ausführbarer Test.
Implementierung der Schritte (Step Definitions)
Jetzt müssen wir Behat „beibringen“, diese Schritte zu verstehen. Öffnen Sie features/bootstrap/FeatureContext.php:
<?php
use Behat\\Behat\\Context\\Context;use Behat\\Gherkin\\Node\\PyStringNode;use Behat\\Gherkin\\Node\\TableNode;
class FeatureContext implements Context{ private $currentUser; private $cart = []; private $products = [];
/** * @Given ich mich als Benutzer