2017-02-05 40 views
1

Я автоматизирую систему с использованием BDD с Serenity + Cucumber-jvm, и у меня есть некоторые случаи, что один и тот же шаг можно использовать как любое определение шага ключевого слова. Пример:Тот же шаг с использованием разных определений шагов Serenity Cucumber

Given something 
When do something 
Then other thing 
And do something 

Как вы можете видеть, do something используется как с when и then, но если я определяю тот же метод с этими 2 аннотациями:

@When("do something") 
@Then("do something") 
public void doSomething() { 
} 

Я получаю следующее сообщение об ошибке:

cucumber.runtime.DuplicateStepDefinitionException: Duplicate step definitions in ... 

Как решить эту проблему

ответ

0

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

@When("do something") 
@Then("do something") 

эквивалентно:

@When("do something") 
@When("do something") 

или

@Then("do something") 
@Then("do something") 

Так, чтобы не получить повторяющиеся определения шага, нужно просто посмотреть на текст не ключевое слово:)

1

«Данный» описывает контекст, в котором происходит сценарий. Он либо описывает состояние , либо описывает что-то, что произошло . Так что произнесите это как в непрерывном, так и в прошедшем времени.

Given the invoice is two weeks late <-- continuous present 
Given the invoice was submitted  <-- past 

Вы также заметите, что он ничего не говорит о том, кто отправил счет-фактуру. Это хорошо для контекста, потому что неважно, как он туда попал. Мы называем это «пассивным», а не «активным» голосом.

«Когда» описывает событие, которое происходит. Мне нравится говорить об этом в настоящем напряженном, активном голосе. «Собака укусила мальчика» - это активный голос. «Мальчик был укушен» пассивен, так как не упоминает, кто это сделал. Говоря о том, кто это делает, мы напоминаем людям, что есть пользователь, даже если этот пользователь является другой системой.

When I check my accounts 
When the admin creates a new record 
When the ETL begins 

«Затем» описывает, что должно произойти в этом контексте для этого события. Мне нравится использовать слово «должно», которое является условным временем. Это также в пассивном голосе, потому что «когда» должно охватывать то, как это произошло.

Then the invoice should be marked as paid 
Then I should receive an email <-- "I" am not the doer so this is still passive voice 

Слово «должно» имеет дополнительное преимущество. Еще во времена развития водопада мы старались, чтобы все требования были правильными, но мы никогда не справлялись с этим.

Используя слово «должно», мы инкапсулируем идею о том, что неопределенность все еще существует. Это побуждает людей задаваться вопросом, являются ли требования точными, и перед лицом изменения технологий и инноваций, независимо от того, являются ли они по-прежнему точными.Легче изменить идею, когда она не использует «must» или «will», поскольку это слова, которые выражают определенность, и если вы убеждены в том, что кто-то уверен в чем-то, вы с меньшей вероятностью будете отступать ,

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

И, конечно же, это помогает дифференцировать «Дано» и «Затем» (но, надеюсь, не «Когда», так как это будет выражаться в активном голосе).

Так что, если бы я использовал свой пример «сделать что-то», я мог бы сказать:

Given something was done 
When someone does something 
Then something else should have happened. 

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

Я написал a blog post на этом некоторое время назад, если это помогает в качестве ссылки.

+0

Да, что сказала Лиз. –