Warum funktioniert der Code nicht, obwohl das Geschäft "alles richtig" gesagt hat?
\n\nHaben 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\nIn 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\nWas ist BDD in einfachen Worten?
\n\nBDD (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\nStellen 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
Dieses Szenario kann jeder lesen – vom Marketingmitarbeiter bis zum Teamleiter. Keine Magie, nur das Verhalten des Systems.
\n\nBDD vs TDD: Was ist der Unterschied?
\n\nViele 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
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\nBDD-Werkzeuge für PHP: Waffenwahl
\n\nDas PHP-Ökosystem bietet zwei Hauptwerkzeuge für die verhaltensgetriebene Entwicklung: Behat und PHPSpec. Sie lösen unterschiedliche Aufgaben.
\n\nBehat – der Alleskönner
\n\nBehat 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\nPHPSpec – das Mikroskop für Entwickler
\n\nPHPSpec 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\nIn diesem Artikel konzentrieren wir uns auf Behat, da es das behaviour-driven development in PHP am besten veranschaulicht.
\n\nUnser erstes BDD-Szenario in PHP mit Behat schreiben
\n\nLassen Sie uns ein reales Beispiel erstellen. Angenommen, wir entwickeln ein Treueprogramm. Der Kunde erhält 10% Rabatt, wenn der Bestellwert 5000 Rubel übersteigt.
\n\nSchritt 1: Behat installieren
\n\ncomposer require --dev behat/behat\n\nDann initialisieren wir das Projekt:
\n\nvendor/bin/behat --init\n\nDie Struktur wird wie folgt aussehen:
\n\nfeatures/\n bootstrap/\n FeatureContext.php\n discount.feature\n\nSchritt 2: Feature-Datei in Gherkin schreiben
\n\nErstellen Sie die Datei features/discount.feature:
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