2017-02-05 2 views
1

Ich bin ein System mit BDD mit Serenity + Cucumber-jvm automatisieren, und ich habe einige Fälle, dass der gleiche Schritt als jede Schlüsselwort Schrittdefinition verwendet werden kann. Beispiel:Gleicher Schritt mit verschiedenen Schrittdefinitionen Serenity Cucumber

Given something 
When do something 
Then other thing 
And do something 

Wie Sie sehen können, ist do something sowohl verwendet mit when und then, aber wenn ich die gleiche Methode mit diesen 2 Anmerkungen definieren:

@When("do something") 
@Then("do something") 
public void doSomething() { 
} 

ich die folgende Fehlermeldung erhalten:

cucumber.runtime.DuplicateStepDefinitionException: Duplicate step definitions in ... 

Wie löse ich dieses Problem

Antwort

0

Für Gurke Das Schlüsselwort vor einer Schrittdefinition (Gegeben, Wann, Dann, Und ..) macht keinen Unterschied, es ist für lexikalische Klarheit und Schönheit. Das heißt, wenn Sie tun

@When("do something") 
@Then("do something") 

entspricht:

@When("do something") 
@When("do something") 

oder

@Then("do something") 
@Then("do something") 

also keine doppelten Schritt Definitionen, die Sie nur auf den Text suchen brauchen, um nicht das Stichwort:)

1

"Gegeben" beschreibt den Kontext, in dem das Szenario stattfindet. Es beschreibt entweder einen Zustand, oder es beschreibt etwas, dass passiert ist. Also formuliere es entweder in der kontinuierlichen Gegenwart oder in der Vergangenheitsform.

Given the invoice is two weeks late <-- continuous present 
Given the invoice was submitted  <-- past 

Sie werden auch feststellen, dass es nichts sagt, der die Rechnung gestellt. Das ist gut für den Kontext, weil es egal ist, wie es dort hinkam. Wir nennen das "passiv" im Gegensatz zur "aktiven" Stimme.

"Wenn" beschreibt ein Ereignis, das passiert. Ich stelle das gerne in die Gegenwart, aktive Stimme. "Der Hund biss den Jungen" ist aktive Stimme. "Der Junge wurde gebissen" ist passiv, da nicht erwähnt wird, wer es getan hat. Indem wir erwähnen, wer das tut, erinnern wir die Leute daran, dass ein Benutzer beteiligt ist, selbst wenn dieser Benutzer ein anderes System ist.

When I check my accounts 
When the admin creates a new record 
When the ETL begins 

"Dann" beschreibt, was in diesem Zusammenhang für dieses Ereignis passieren soll. Ich verwende gerne das Wort "soll", das eine konditionale Zeitform ist. Es ist auch in der passiven Stimme, weil das "wann" abdecken sollte, wie es passiert ist.

Then the invoice should be marked as paid 
Then I should receive an email <-- "I" am not the doer so this is still passive voice 

Das Wort "sollte" hat einen zusätzlichen Vorteil. In den Tagen der Waterfall-Entwicklung haben wir versucht, alle Anforderungen zu erfüllen, aber wir haben es nie geschafft.

Mit dem Wort "sollte", kapseln wir die Idee, dass Unsicherheit noch existiert. Es ermutigt die Menschen zu hinterfragen, ob die Anforderungen genau sind, und angesichts der sich ändernden Technologie und Innovation, ob sie noch genau sind noch.Es ist einfacher, eine Idee zu ändern, wenn sie nicht "muss" oder "wollen" verwendet, da dies Worte sind, die Gewissheit ausdrücken, und wenn Sie überzeugt sind, dass sich jemand anderer über etwas sicher ist, werden Sie weniger zurückschlagen .

Indem wir uns zurückdrängen und andere Vorschläge machen, bekommen wir "Exploration by Example", und es ist die Vorstufe zur Spezifikation oder Test mit Beispielen, die nette Nebenprodukte sind. Idealerweise werden Sie mehr Szenarien durchgehen, als Sie tatsächlich halten, und entscheiden, welche innerhalb und außerhalb des Bereichs liegen. Das Wort "sollte" hilft dabei sehr, und es hilft auch, es zu behalten, wenn Sie diese Szenarien erfassen und aufschreiben.

Und natürlich hilft es, "Given" und "Then" zu unterscheiden (aber hoffentlich nicht "When", da das sowieso in der aktiven Stimme formuliert wird).

Also, wenn ich dein Beispiel „etwas tun“ verwenden, so könnte ich sagen:

Given something was done 
When someone does something 
Then something else should have happened. 

Jetzt keine Ihrer Szenarioschritte sind ähnlich, und Sie haben geklärt, was Sie wirklich von ihnen bedeuten, auch.

Ich schrieb a blog post auf diesem eine Weile zurück, wenn es als Referenz hilft.

+0

Ja, was Liz sagte. –

Verwandte Themen