2016-03-31 10 views
0

Obwohl ich Unit-Tests für 20 oder mehr Jahre geschrieben habe, bin ich neu bei Gherkin und habe die Aufgabe, eine Story für eine .feature-Datei zu implementieren, die sich auf Folgendes reduziert:Gurke - Aufrechterhaltung des Zustands zwischen den Szenarien

Das heißt, eine lange, lange Kette von Szenarien, jede abhängig von dem Zustand des Systems wie von seinem Vorgänger konfiguriert.

Das fühlt sich für jemanden, der an Komponententests gewöhnt ist, nicht richtig an - aber diese Szenarien werden nicht getrennt und separat ausgeführt.

Was ist die beste Vorgehensweise hier?

Sollte ich in ein sehr langes Szenario umschreiben?

Ich verwende bereits ein 'Seitenobjekt', um den größten Teil meines Codes aus den Schrittdefinitionen herauszuhalten - sollte ich die Schritte als einzelne Aufrufe codieren, die in späteren Szenarien wiederverwendet werden können?

Ich führe Gurke in Javascript.

Antwort

1

Das Wichtigste zuerst, Achtung:

Für die Mehrheit von Tests (und mit der Mehrheit den ich meine 99,9% der Zeit), dann sollten Sie nicht aus dem vorherigen Szenario weitermachen, aufgrund der Tatsache, Wenn ein Szenario in Ihrer Funktion fehlschlägt, wird mehr zerfallen, weil Sie versucht haben, sie miteinander zu verbinden.

Und auf meine Antwort:

Je nachdem, ob Sie versuchen, für alle Ihre Szenarien nach (innerhalb der gleichen Funktion) ein einrichten zu tun, oder ob Sie mögen, dass die erste Szenario mehr wiederzuverwenden mal (in separaten Features) könntest du eines von 2 Dingen machen.

  1. Machen Sie das erste Szenario einen Hintergrund
  2. das erste Szenario in einem Schritt Definition Stellen, für die Verwendung in mehreren Feature-Dateien

Zum ersten:

Background: 
    Given that the app is open 
    When I open a certain dialog 
    Then it has a thing somewhere 

Scenario: a 
    Given that the dialog from 'a' is open... 

Nur Denken Sie daran, dass es bei Verwendung als Hintergrund für alle folgenden Szenarien innerhalb dieser Funktion verwendet wird.

für das zweite:

Scenario: a 
    Given that the app is open 
    When I open a certain dialog 
    Then it has a thing somewhere 

Scenario: b 
    Given I have opened the dialogue from a 
    And the '<DialogFromA>' dialog is open... 
+3

Ich stimme zu 99.99% der Zeit mit Ihnen überein. Für die 0,01% der Zeit, die Sie denken, dass es OK ist, den Zustand aus einem früheren Szenario zu verwenden, stimme ich nicht zu. Nur meine dogmatische Meinung. Dieser Status erfordert, dass die Szenarien in einer bestimmten Reihenfolge und nicht in einem Raster ausgeführt werden. –

+2

Das einzige Mal, ich würde es empfehlen, wenn Sie noch die Schrittdefinition für das vorherige Szenario entwickeln, so dass das neue Szenario immer noch in der CI übergibt. In einer perfekten Welt wird die Schrittdefinition für das vorherige Szenario geschrieben, es kann jedoch der Fall sein, dass Sie einen Junior Tester haben, frisch von der Universität, der die Dateien schreibt, der die Sprache vielleicht nicht vollständig versteht. Nachdem die Schrittdefinition erstellt wurde oder das vorherige Szenario in einen Hintergrund umgewandelt wurde, wird es veraltet und wird daher in die _korrekte_ Vorgehensweise geändert. –

+0

Danke, @KyleFairns - Ich habe die Frage bearbeitet, um zu betonen, dass das Feature eine sehr lange Kette von Szenarios hat, jede davon abhängig vom Vorgänger. – LeeGee

1

würde ich mich fragen, was ist das tatsächliche Verhalten hinter allen Schritten?

Dann würde ich das als das gewünschte Verhalten implementieren und die Reihenfolge zwischen den Schritten den Stapel hinunter schieben. Wahrscheinlich mit einer oder vielen Hilfsklassen. Es gibt nichts, was sagt, dass Sie die Reihenfolge der Szenarien erzwingen können, ohne einen Hack einzuführen, um sie zusammen zu zwingen.

Denken Sie daran, dass es bei BDD und Cucumber alles um lesbare Kommunikation geht.Die Abhängigkeiten, nach denen du fragst, sollten meiner Meinung nach im Support-Code Gherkin-Trigger implementiert werden.

+0

"Denken Sie daran, dass es bei BDD and Cucumber alles um lesbare Kommunikation geht." --- Ich denke, das ist die Trumpfkarte, danke. – LeeGee

Verwandte Themen