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..
请注意,创建用户和项目可能需要大量信息。因此,我们引用一个角色(“Charles”、“Firebird”)作为我们创建的项目类型的模板,而不是在功能文件中拼写所有这些信息。我们可以通过使用参数类型 ( {persona}
, {project}
) 将这些提供给步骤定义对象,而不是纯字符串。这些将在执行步骤之前将字符串转换为对象。