2012-12-04 14 views
6

Say mam:JBehave niejednoznaczne krok

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

Kolejnym krokiem będzie oznaczony jako dwuznaczny:

Given first name is John and last name is Smith 

Bez użycia cudzysłowu otoczyć pierwszy parametr, jak mogę rozwiązać ten krok, dlatego pasuje tylko do drugiej? Używanie cudzysłowów do otaczania obydwu parametrów osobno również ma ten sam problem niejednoznaczności.

Czy istnieje limit długości każdego parametru? Czy są pewne postacie, których nie można przekazać?

Odpowiedz

8

Problem ten można rozwiązać za pomocą priorytetów kroku, co zostało udokumentowane tutaj: http://jbehave.org/reference/stable/prioritising-steps.html

Twój problem zostanie rozwiązany przez ustawienie wyższego priorytetu do wariantu z dwoma parametrami:

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

próbowałem swój przykład i przy tej kombinacji dwa etapy zostały rozdzielone.

(Edit: mój początkowy roztwór miał cytaty dla parametrów, ale działa bez również)

+1

Dzięki! Nie wiedziałem o priorytetach kroku. Będzie to bardzo przydatne. :) – user1877292

1

myślę, że ten scenariusz może pisać w ten sposób:

Given first name is John 
And last name is Smith 

a etapy:

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

Można utworzyć obiekt osoba po raz pierwszy się ustawić nazwę i nazwisko w " @Given "kroki.
Jeśli chcesz dodać kolejną nieruchomość, jak e-mail, wystarczy utworzyć kolejny krok:

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

więc ten problem nie zdarzy i kod będzie bardziej wielokrotnego użytku.

+0

Niestety, myślę, że był to zły uproszczenie przykład tego, co chciałem. Pozwól mi spróbować przeformułować to lepiej: @Given („osoba z pierwszej $ name Imię”) @Given („osoba z pierwszej nazwie $ Imię i nazwisko $ lastName”) gdzie dzwonisz kroki tworzyłoby nowe obiekty osób. Następujący krok zostanie oznaczony jako niejednoznaczny: Podana osoba z imieniem John i nazwisko Smith Może ją sparsować jako osobę z imieniem "Jan i nazwisko Smith" lub imię "John" "i nazwisko" Smith ". – user1877292

+0

Nie musisz tworzyć obiektu we wszystkich krokach "Podany", możesz zapisać nazwę i nazwisko w atrybutach oraz w kroku "Kiedy" utworzyć obiekt. Używam tego (podobnego) w [przykład] (http: // github.com/piantino/automatic-traceability-example/blob/master/scrumforge-approval-test-jbehave/src/test/java/org/scrumforge/accept/test/CreateUserStoryTest.java) z tymi [scenariuszami] (https: // github.com/piantino/automated-traceability-example/blob/master/scrumforge-acceptance-test-jbehave/src/test/resources/stories/manage_resources/scrum_team/CreateUser.story). Myślę, że to podejście jest bardziej wielokrotnego użytku. –

+0

Tak, zrozumiałem, jak mógłbym podzielić to na osobne kroki, aby to działało, ale chciałem zobaczyć, czy był sposób, w jaki mogłem zachować to jako jeden krok, ponieważ chcę stworzyć wiele obiektów, z określonymi atrybutami określonymi jako potrzebne. – user1877292

0

Co pracował dla mnie było zastąpienie wsporniki kostki (<>) na znak dolara ($), czyli

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

i

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