Несколько шагов для одного и того же определения шага огурца - PullRequest
0 голосов
/ 10 мая 2018

Кто-нибудь знает, поддерживает ли огурец / Java функциональность нескольких шагов для доступа к одному и тому же stepDefinition?

Чего я пытаюсь добиться - это использовать данный шаг, который в данный момент используется какКогда (в другом более сложном тесте, где текущее Когда становится просто предварительным условием)

В моем предыдущем опыте (Specflow / .Net) я мог бы использовать что-то вроде

[Given(@"the user added a (.*) to the cart")]
[When(@"the user adds a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string product){
    ////code that adds to the cart
}

Если я используюПо той же методологии, что и в Specflow, создается исключение DuplicateStepDefinitionException.Потому что Cucumber не учитывает ключевые слова (данные, когда и т. Д.) При сопоставлении шагов с определениями шагов.Cucumber ищет только regEx в определениях шагов, поэтому мне нужно иметь только одно определение шагов (учитывая ИЛИ, когда).Значение

[When(@"the user adds a (.*) to the cart")]

также будет соответствовать

[Given(@"the user adds a (.*) to the cart")]

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

Так что вопрос: как я могу использовать одну и ту же реализацию для двухэтапных определений?

Единственное решение, которое я вижу, состоит в том, чтобы извлечь содержимое метода, реализующего данный объект, в другой метод и вызвать его как в данном определении шага, так и в разделе Когда.. Что-то вроде:

[Given(@"the user added a (.*) to the cart")]
public void GivenTheUserAddedATotheCart(string product){
    addToTheCart(product);
}

[When(@"the user adds a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string product){
    addToTheCart(product);
}

public void addToTheCart(String product){
////code that adds to the cart
}

... но я не считаю это хорошим решением

1 Ответ

0 голосов
/ 10 мая 2018

Я нашел несколько обсуждений по этой теме в репозитории cucumber, но большинство из них относятся к реализации cucumber-jvm:

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

[Given(@"the user add(s|ed) a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string tense, string product){
    ////code that adds to the cart
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...