2016-04-01 18 views
0

Ich erstelle ein PHP-Skript, das die empfangenen POST-Daten (von AJAX oder sonst) verarbeiten und weiterleiten soll (an ein anderes Skript). Ich frage mich, wie man es auf eine "BDD-Art" entwickelt.BDD und Behat für ein PHP-Skript

Bisher habe ich den "Verarbeitungsteil" gemacht, indem ich Funktionen mit Behat geschrieben und die erforderlichen Blöcke (Klassen) mit phpspec erstellt habe.

Aber dann bin ich blockiert, wenn es darum geht, diese folgenden Funktionen zu testen:

  • das Skript nur Prozesse/akzeptiert Daten POST,
  • das Skript sendet nur gültige Daten weiter nach der Verarbeitung,
  • Das Skript sendet Fehler bei ungültigen Daten zurück.

Es scheint mir, dass ich die Tests gegen das Drehbuch schreiben konnte selbst, aber ich frage mich dann: wenn

  • wenn es eine gute Idee ist (tut es einfach genug erscheinen, aber ein bisschen chaotisch weil es nicht viel Isolation gibt)
  • wie man das elegant in behat macht (es scheint unordentlich für mich, meinen lokalen Server manuell laufen zu lassen und seine URL in meinen Tests/Kontexten fest programmiert zu haben, aber vielleicht ist es nur der Weg es)

Irgendwelche Ideen oder Vorschläge?

Antwort

0

Dieses eher ein Kommentar ist eher als eine richtige Antwort, aber es wäre in einem Kommentar entweder nicht gut passen ...

Also als erstes, gut, dass Sie zu test all the things versuchen. Aber um BDD zu machen (also Behath zu verwenden), muss es für einen Stakeholder oder einen Teil des Unternehmens eine Art von Vorteil geben, mit wem Sie sich über das betreffende Feature unterhalten sollten.

Die Tatsache, dass Sie nur ein Skript beschreiben, das eine bestimmte Eingabe empfängt und es in eine bestimmte Ausgabe umwandelt, klingt ziemlich genau das, was Sie von einem Komponententest erwarten würden, richtig?

Auf der anderen Seite, wenn dieses spezielle Skript die Bedürfnisse eines Stakeholders löst und es eine Geschichte oder ein Szenario gibt, das dieses Skript zu erfüllen hilft, gehe ich davon aus, dass sich der Zustand des Systems ändern würde kann für prüfen. Wenn ja, dann machen Sie weiter und beschreiben Sie es mit Behat, indem Sie sich mit den entsprechenden Interessengruppen unterhalten. Ich schätze, dass Sie eine Umgebung für Ihr System einrichten müssen, in der Sie dann Ihr Skript ausführen und dann überprüfen würden, ob der Zustand des Systems entsprechend geändert wurde.

1

BDD:

Lassen Sie uns versuchen Sie Ihre Denkweise ein wenig zu ändern. Der BDD ist eine Zusammenarbeit und der Automatisierungsteil (Tests) ist nur der letzte Teil davon.

Ihre Akzeptanztests, das machen Sie über Behat, sollten nur eine Spezifikation Ihres Features anhand von Beispielen abdecken. Das heißt, konzentrieren Sie sich nicht auf das Testen aller möglichen Szenarien, wie dies bei Unit-/Integrationstests der Fall wäre, sondern geben Sie nur das Minimum an, das Ihr Feature beschreibt, um die Intention dieses Features aufzudecken.

In den meisten Fällen decken die Beispiele nur positive Szenarien ab und 1-5 sind ausreichend.

Kleine Hilfe hier. Fragen Sie sich, was würden Sie erwähnen, wenn diese Beispiele Teil einer Dokumentation für Kunden wären? Die Spezifikation durch Beispiele ist nicht mehr und nicht weniger als die Dokumentation einer Anwendung, die automatisch getestet werden kann.

Testing Level:

Leider weiß ich nicht den technischen Hintergrund des Skripts so die Antwort eine Theorie mehr sein wird.

Es gibt mehrere Ebenen von Akzeptanztests und desto höher testen Sie desto mehr werden Sie decken aber desto teurer ist die Erstellung und Pflege:

  1. UI
  2. HTTP-Anforderung über Infrastruktur
  3. die Anwendung einleiten und injizieren Sie eine gefälschte Anfrage
  4. Rufen Sie einen Controller direkt
  5. Rufen Sie einen Anwendungsdienst, der die Domänenlogik
  6. verarbeitet

Da ist meine persönliche Praxis. Da BDD mit TDD am besten ist, fange ich immer mit dem Punkt 5) an, und manchmal füge ich auch die höhere Stufe 3) hinzu, um sicher zu sein, dass die Anwendung als Ganzes korrekt funktioniert. Ich benutze Level 2) und 1) sehr selten, da ich meine Infrastruktur nicht über Akzeptanztests testen muss, es ist nicht ihre Aufgabe.