2012-12-04 23 views
6

Dire che ho:JBehave ambiguo passo

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

Il passo successivo sarebbe stato contrassegnato come ambiguo:

Given first name is John and last name is Smith 

Senza usare le virgolette per circondare il primo parametro, come posso risolvere questo passo in modo che corrisponde solo alla seconda? Anche utilizzare le virgolette per circondare entrambi i parametri ha lo stesso problema di ambiguità.

Esiste un limite per quanto tempo ciascun parametro è? Ci sono alcuni personaggi che non possono essere passati?

risposta

8

È possibile risolvere questo problema utilizzando le priorità passo, come documentato qui: http://jbehave.org/reference/stable/prioritising-steps.html

Il tuo problema sarebbe risolto impostando una priorità più alta alla variante con due parametri:

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

ho provato il tuo esempio e con questa combinazione, i due passaggi sono stati separati.

(Edit: la mia soluzione iniziale era preventivi per i parametri, ma funziona senza pure)

+1

Grazie! Non conoscevo le priorità del passo. Questo sarà molto utile. :) – user1877292

1

penso che questo scenario può essere scrivere in questo modo:

Given first name is John 
And last name is Smith 

E i passi:

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

è possibile creare l'oggetto persona prima un set il nome e il cognome in " @Given "passi.
Se avete bisogno di aggiungere un'altra proprietà, come e-mail, basta creare un altro passo:

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

Quindi questo problema non succederà mai e il codice sarà più riutilizzabile.

+0

dispiace, credo che era una brutta la semplificazione di un esempio di quello che volevo. Vorrei cercare di riformulare meglio: @Given ("una persona con nome $ firstName") @Given ("una persona con nome $ firstName e cognome $ lastName") dove chiamare questi passaggi creerebbe nuovi oggetti personali. Quindi il seguente passaggio sarebbe contrassegnato come ambiguo: Dato una persona con nome John e cognome Smith Potrebbe analizzarlo come creare una persona con nome "John e cognome Smith" o nome "John" "e cognome" Smith ". – user1877292

+0

Non è necessario creare l'oggetto in tutti i passaggi "Dati", è possibile memorizzare il nome e il cognome negli attributi e nel passaggio "Quando" creare l'oggetto. Io uso questo (simile) in [esempio] (http: // github.com/piantino/esempio-tracciabilità automatica/blob/master/scrumforge-acceptance-test-jbehave/src/test/java/org/scrumforge/accept/test/CreateUserStoryTest.java) con questo [scenari] (https: // github.com/piantino/automated-traceability-example/blob/master/scrumforge-acceptance-test-jbehave/src/test/resources/stories/manage_resources/scrum_team/CreateUser.story). Penso che questo approccio sia più riutilizzabile. –

+0

Sì, ho capito come potrei dividerlo in passaggi separati per farlo funzionare, ma volevo vedere se c'era un modo per mantenerlo come un passo perché voglio creare molti oggetti, con certi attributi impostati come necessario. – user1877292

0

Che cosa ha funzionato per me era sostituendo staffe caviglia (<>) per il simbolo del dollaro ($), vale a dire

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

e

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