2014-01-14 4 views
0

Я поднял аналогичный вопрос, но сформулировал это плохо и так не получил ответы, которые я получил после. Вот еще одна попытка:Избегайте дублирования кода при определении заданий Gherkin Given и When

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

Вот три сценария:

Scenario: Test a song can be played 
Given I setup a new account and default user 
When I add a "2nd" user 
And the "2nd" user starts playing a song 
Then I should see a song is playing 

Scenario: Test a playing song being stopped (version A) 
Given I setup a new account and default user 
And I add a "2nd" user 
And the "2nd" user starts playing a song 
When the "2nd" user stops playing a song 
Then I should see a song is not playing 

Scenario: Test a playing song being stopped (version B) 
Given a "2nd" user is playing a song 
When the "2nd" user stops playing a song 
Then I should see a song is not playing 

Так что я понимаю, что вариант B выше лучше с точки бизнес-пользователей, чем версия А. Однако из кода повторного использования точки зрения, конечно, версия B потребует Данное заявление повторить код, используемый в большинстве первого сценария?

Приветствия,

Чарли

ответ

1

Так версия B является один, чтобы идти.

Если определение данного шага (например, версия B) имеет действия, выполненные в шагах, описанных в других определениях шагов (например, 1-й сценарий), я просто создаю закрытый метод в определении шага (или в другом месте, если используется в определении шага файлы), которые могут выдавать как оператор Given, так и If. Это отменяет необходимость копирования и вставки кода :-)

+0

Вы правы, повторное использование шагов необходимо при написании сценариев. Я предполагаю, что вы не слышали о шаблоне объекта страницы? Этот шаблон способствует инкапсуляции всех действий, которые могут выполняться на странице в собственный класс. Использование этого шаблона поможет вам в значительной степени. См. Эту статью, которая сделает вопросы более понятными http://blog.josephwilk.net/cucumber/page-object-pattern.html –

+1

Привет, свежий. Да, я использую эквивалент POM, поскольку я тестирую службы, а не объекты браузера. Тем не менее, я по-прежнему не могу копировать и вставлять даже 3 строки кода для каждого шага и, следовательно, разделять частные методы, причем код POM внутри них является дополнительным уровнем извлечения, но стоит сделать :-) –

+0

Ah Я понимаю. Да, то, что вы делаете, имеет большой смысл. –

Смежные вопросы