JBehave неоднозначный шаг

Скажем, у меня есть:

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

Следующий шаг будет помечен как неоднозначный:

Given first name is John and last name is Smith

Как я могу исправить этот шаг, не заключая в кавычки первый параметр, чтобы он соответствовал только второму? Использование кавычек для заключения обоих параметров по отдельности также приводит к той же проблеме двусмысленности.

Есть ли ограничение на длину каждого параметра? Есть ли определенные символы, которые нельзя передать?


person user1877292    schedule 04.12.2012    source источник


Ответы (3)


Вы можете решить эту проблему, используя приоритеты шагов, как описано здесь: http://jbehave.org/reference/stable/prioritising-steps.html

Ваша проблема будет решена путем установки более высокого приоритета варианта с двумя параметрами:

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

Я попробовал ваш пример, и с помощью этой комбинации два шага были разделены.

(Редактировать: в моем первоначальном решении были кавычки для параметров, но оно работает и без них)

person dertseha    schedule 06.12.2012
comment
Спасибо! Я не знал о приоритетах шагов. Это очень пригодится. :) - person user1877292; 06.12.2012

Я думаю, что этот сценарий можно написать так:

Given first name is John
And last name is Smith

И шаги:

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

Вы можете сначала создать объект человека, а затем установить имя и фамилию в шагах "@Given".
Если вам нужно добавить другое свойство, например адрес электронной почты, вам просто нужно создать еще один шаг:

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

Так что этой проблемы не будет, и ваш код будет более пригодным для повторного использования.

person Andre Piantino    schedule 05.12.2012
comment
Извините, я думаю, это было плохое упрощение примера того, что я хотел. Позвольте мне попытаться перефразировать это лучше: @Given(человек с именем $firstName) @Given(человек с именем $firstName и фамилией $lastName), где вызов этих шагов приведет к созданию новых объектов человека. Тогда следующий шаг будет помечен как неоднозначный: Дан человек с именем Джон и фамилией Смит Он может либо проанализировать его как создание человека с именем Джон и фамилией Смит, либо с именем Джон и фамилией Смит. - person user1877292; 05.12.2012
comment
Вам не нужно создавать объект во всех заданных шагах, вы можете сохранить имя и фамилию в атрибутах и ​​​​на шаге Когда создать объект. Я использую это (похожее) в пример с этим сценарии. Я думаю, что этот подход более многоразовый. - person Andre Piantino; 05.12.2012
comment
Да, я понял, как я могу разделить его на отдельные шаги, чтобы заставить его работать, но я хотел посмотреть, есть ли способ сохранить его как один шаг, потому что я хочу создать много объектов с определенными атрибутами, установленными по мере необходимости. . - person user1877292; 06.12.2012

Что сработало для меня, так это замена скобок на щиколотке (‹>) на знак доллара ($), т.е.

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

и

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