Gauge — это фреймворк для написания приемочных тестов. Спецификация в Gauge — это, по сути, сценарий ручного тестирования, который стал исполняемым. Из-за этого имеет смысл повторно использовать шаги, поскольку они, как правило, описывают низкоуровневые операции.
Cucumber, с другой стороны, облегчает BBD, и вы используете Gherkin для захвата поведения системы, а не операций в тесте. Таким образом, вместо Login as user "Charles: and create project "Firebird"
, описывающего операции, вы должны написать Given Administrator "Charles" created the project "Firebird"
.
Это значительный сдвиг в перспективе, но он помогает четко объяснить, что программное обеспечение должно делать, а не то, как оно должно работать.
В результате вы обычно избегаете написания низкоуровневых операций в Gherkin. Скорее вы извлекаете их в методы и вызываете эти методы из своего шага. Затем вы также можете повторно использовать эти методы на других этапах.
Например, предположим, что у нас есть два шага, каждый из которых создает пользователя:
Given Administrator "Charles" created the project "Firebird"
And "Jullia" is added to project "Firebird"
@Given("{role} {persona} created the project {project}")
public void persona_with_role_creates_a_project(Role role, Persona persona, Project project){
createRole(role);
createUserForPersona(persona);
addRoleToUserForPersona(persona, role);
loginUserForPersona(persona);
createProject(project);
}
@And("{persona} is added to project {project}")
public void persona_with_role_creates_a_project(Persona persona, Project project){
createUserForPersona(persona);
addUserForPersonaToProject(persona, project);
}
@ParameterType("\"([^"]+)\"")
public Persona persona(String name){
// look up the persona by name from somewhere e.g. a config file
}
ect...
private void createRole(Role role){
// API calls to make a role here
// For test isolation it is important you don't reuse anything between tests.
}
private void createUserForPersona(Persona persona){
// API calls to create a user
// Don't forget to store the credentials for the persona somewhere
}
ect..
Обратите внимание, что для создания пользователя и проекта может потребоваться довольно много информации. Таким образом, вместо того, чтобы излагать всю эту информацию в файле функций, мы ссылаемся на персонажей («Чарльз», «Жар-птица»), которые действуют как шаблоны для типа создаваемого нами проекта. Мы можем предоставить их объектам определения шагов, а не простым строкам, используя типы параметров ({persona}
, {project}
). Они преобразуют строку в объект до выполнения шага.
person
M.P. Korstanje
schedule
06.03.2020