2012-12-04 7 views
6

Sagen, ich habe:JBehave mehrdeutig Schritt

@Given("first name is $firstName") 
@Given("first name is $firstName and last name is $lastName") 

Der folgende Schritt als mehrdeutig gekennzeichnet sein würde:

Given first name is John and last name is Smith 

ohne Anführungszeichen mit dem ersten Parameter zu umgeben, wie kann ich dieses Problem beheben Schritt, so dass es passt nur der zweite? Die Verwendung von Anführungszeichen, um beide Parameter getrennt zu umgeben, hat ebenfalls das gleiche Ambiguitätsproblem.

Gibt es eine Begrenzung für die Länge der einzelnen Parameter? Gibt es bestimmte Charaktere, die nicht weitergegeben werden können?

Antwort

8

Sie können dieses Problem lösen, indem Schritt Prioritäten verwenden, wie hier dokumentiert: http://jbehave.org/reference/stable/prioritising-steps.html

Ihr Problem, indem eine höhere Priorität auf die Variante mit zwei Parametern gelöst werden würde:

@Given("first name is $firstName") 
@Given(value = "first name is $firstName and last name is $lastName", priority = 1) 

Ich habe versucht, Ihr Beispiel und mit dieser Kombination wurden die zwei Schritte getrennt.

(Edit: meine erste Lösung hatte Anführungszeichen für die Parameter, aber es funktioniert auch ohne)

+1

Danke! Ich wusste nichts von Stufenprioritäten. Dies wird sehr nützlich sein. :) – user1877292

1

Ich denke, dieses Szenario auf diese Weise schreiben kann:

Given first name is John 
And last name is Smith 

Und die Schritte:

@Given("first name is $firstName") 
@And("last name is $lastName") 

Sie können die Person Objekt erstellen zunächst einen Satz der Namen und den Nachnamen in den " @Given "Schritte.
Wenn Sie eine andere Eigenschaft hinzufügen müssen, wie E-Mail, müssen Sie nur noch einen Schritt erstellen:

@And("the email is $email") 
public addEmail(String email) { 
    person.setEmail(email); 
} 

so dass dieses Problem nicht passieren und Sie Code wird mehr wiederverwendbar.

+0

Sorry, ich denke, dass eine schlechte Vereinfachung eines Beispiels war, was ich wollte. Lassen Sie mich versuchen, es besser zu umformulieren: @Given („eine Person mit Vornamen $ Vornamen“) @Given („eine Person mit Vornamen $ Vornamen und Zuname $ Nachnamen“) wo rief diese Schritte würde neue Personenobjekte erstellen. Dann wäre der folgende Schritt als mehrdeutig markiert: Gegeben eine Person mit Vorname John und Nachname Smith Es könnte entweder analysieren wie eine Person mit dem Vornamen "John und Nachname Smith" oder Vorname "John "und Nachname" Smith ". – user1877292

+0

Sie müssen das Objekt nicht in allen "Given" Schritten erstellen, Sie können den Namen und den Nachnamen in Attributen speichern und im Schritt "When" das Objekt erstellen. Ich benutze dies (ähnlich) in [Beispiel] (http: // github.com/piantino/automatisiertes-traceability-beispiel/blob/master/scrumforge-abnahme-test-jbehave/src/test/java/org/scrumforge/akzeptanz/test/CreateUserStoryTest.java) mit diesem [szenarien] (https: // github.com/piantino/automated-traceability-example/blob/master/scrumforge-acceptance-test-jbehave/src/test/resources/stories/manage_resources/scrum_team/CreateUser.story). Ich denke, dass dieser Ansatz wiederverwendbar ist. –

+0

Ja, ich verstand, wie ich es in separate Schritte aufteilen könnte, um es funktionieren zu lassen, aber ich wollte sehen, ob es einen Weg gibt, es als einen Schritt zu behalten, weil ich viele Objekte mit bestimmten Attributen erstellen möchte erforderlich. – user1877292

0

Was für mich gearbeitet wurde Knöchel Klammern (<>) für das Dollarzeichen ($) ersetzt wird, das heißt

@Given("a person with first name <firstName>") 

und

@Given("a person with first name <firstName> and last name <lastName>")