BDD in PHP: Code schreiben, den das Geschäft versteht

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum funktioniert der Code nicht, obwohl das Geschäft "alles richtig" gesagt hat?

\n\n

Haben Sie schon einmal die Situation erlebt: Der Manager behauptet, die Aufgabe sei gelöst, die Tests sind grün, aber der Benutzer ist trotzdem unzufrieden? Ein Klassiker. Das Problem liegt nicht im Code – das Problem liegt in der Kommunikation. Wir sprechen verschiedene Sprachen: Das Geschäft operiert mit Szenarien, Entwickler mit Methoden und Klassen. Hier kommt BDD (Behaviour-Driven Development) ins Spiel – verhaltensgetriebene Entwicklung. Und ja, auf PHP funktioniert das hervorragend.

\n\n

In diesem Artikel werden wir untersuchen, wie BDD auf PHP hilft, vage "Wunschvorstellungen" in verständliche Tests zu verwandeln, die sowohl der Manager als auch der Programmierer verstehen. Sie erfahren, wie sich BDD von gewöhnlichem TDD unterscheidet, wie man Szenarien in Gherkin schreibt und welche Werkzeuge (Behat, PHPSpec) das Leben wirklich einfacher machen.

\n\n

Was ist BDD in einfachen Worten?

\n\n

BDD (Behaviour-Driven Development) ist eine Weiterentwicklung von TDD. Während sich TDD auf die Frage "Wie teste ich Code?" konzentriert, beantwortet BDD die Frage "Was muss der Code tun, damit das Geschäft zufrieden ist?".

\n\n

Stellen Sie sich vor, Sie schreiben einen Online-Shop. Anstelle eines abstrakten Tests wie "die Methode applyDiscount() muss den Preis senken", schreiben Sie ein Szenario:

\n\n
    \n
  • Gegeben: im Warenkorb befindet sich ein Artikel für 1000 Rubel
  • \n
  • Wenn: der Benutzer den Aktionscode "SALE10" eingibt
  • \n
  • Dann: beträgt der Warenkorbwert 900 Rubel
  • \n
\n\n

Dieses Szenario kann jeder lesen – vom Marketingmitarbeiter bis zum Teamleiter. Keine Magie, nur das Verhalten des Systems.

\n\n

BDD vs TDD: Was ist der Unterschied?

\n\n

Viele verwechseln diese Konzepte. Lassen Sie uns Klarheit schaffen:

\n\n
    \n
  • TDD – wir schreiben einen Test, dann den Code, dann refaktorisieren wir. Tests werden von Entwicklern für Entwickler geschrieben.
  • \n
  • BDD – zuerst schreiben wir ein Verhaltensszenario in natürlicher Sprache, dann automatisieren wir es. Szenarien werden im Dialog mit dem Geschäft geschrieben.
  • \n
\n\n

BDD ersetzt TDD nicht, sondern ergänzt es. Sie schreiben immer noch Unit-Tests, aber jetzt haben Sie eine "lebendige Dokumentation" in Form von Szenarien.

\n\n

BDD-Werkzeuge für PHP: Waffenwahl

\n\n

Das PHP-Ökosystem bietet zwei Hauptwerkzeuge für die verhaltensgetriebene Entwicklung: Behat und PHPSpec. Sie lösen unterschiedliche Aufgaben.

\n\n

Behat – der Alleskönner

\n\n

Behat ist ein Framework für Akzeptanztests. Es arbeitet mit der Sprache Gherkin (dem bekannten "Gegeben-Wenn-Dann"). Behat ist ideal für Integrationstests, API-Tests, Web-Oberflächen und Business-Logik auf oberster Ebene.

\n\n

PHPSpec – das Mikroskop für Entwickler

\n\n

PHPSpec ist ein Werkzeug zur Spezifikation von Klassen. Es ist näher an TDD, aber mit der BDD-Philosophie: Sie beschreiben das Verhalten eines Objekts, nicht sein Innenleben. PHPSpec eignet sich hervorragend für Unit-Tests der Domänenlogik.

\n\n

In diesem Artikel konzentrieren wir uns auf Behat, da es das behaviour-driven development in PHP am besten veranschaulicht.

\n\n

Unser erstes BDD-Szenario in PHP mit Behat schreiben

\n\n

Lassen Sie uns ein reales Beispiel erstellen. Angenommen, wir entwickeln ein Treueprogramm. Der Kunde erhält 10% Rabatt, wenn der Bestellwert 5000 Rubel übersteigt.

\n\n

Schritt 1: Behat installieren

\n\n
composer require --dev behat/behat
\n\n

Dann initialisieren wir das Projekt:

\n\n
vendor/bin/behat --init
\n\n

Die Struktur wird wie folgt aussehen:

\n\n
features/\n  bootstrap/\n    FeatureContext.php\n  discount.feature
\n\n

Schritt 2: Feature-Datei in Gherkin schreiben

\n\n

Erstellen Sie die Datei features/discount.feature:

\n\n
Feature: Rabattberechnung für treue Kunden\n  As a Vertriebsmanager\n  I want to einen Rabatt von 10% auf Bestellungen ab 5000 Rubel gewähren\n  So that große Einkäufe fördern\n\n  Scenario: Bestellung überschreitet die Rabattschwelle\n    Given Waren im Wert von 6000 Rubel befinden sich im Warenkorb\n    When ich den Endbetrag anfordere\n    Then der Endbetrag sollte                

Blogs

Buchempfehlungen