Вложенные шаги относятся к вызову определенных шагов внутри «основного». В вашем примере первый сценарий имеет функцию входа в систему, которая будет/может использоваться во всех других сценариях, требующих входа пользователя в систему.
Таким образом, во втором сценарии будет шаг Given
, который вызывает действие/шаги входа в систему из первого сценария. Есть несколько способов сделать это:
1. Если вы определяете эти шаги в одном и том же классе, это просто вопрос вызова одних и тех же методов внутри другого шага/метода.
Вот так:
public class TestStepsOne {
// Steps from first scenario
@Given("^the user name and password are entered$")
public void enterUsernamePassword() throws Throwable {
System.out.println("User and password entered");
}
@When("^login button is clicked$")
public void clickLoginButton() throws Throwable {
System.out.println("Clicked login button");
}
@Then("^user login is successful$")
public void isLoggedIn() throws Throwable {
System.out.println("Logged in!");
}
// All together
@Given("the user is logged in")
public void loginSuccessfully() throws Throwable {
enterUsernamePassword();
clickLoginButton();
isLoggedIn();
}
}
Теперь вы можете использовать Given the user is logged in
в любом сценарии, и он выполнит действие входа в систему.
<сильный>2. Использование пикоконтейнера -> подробности здесь
Сначала вам нужно добавить эти зависимости к вашему pom.xml
:
<dependency>
<groupId>org.picocontainer</groupId>
<artifactId>picocontainer</artifactId>
<version>2.15</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>1.2.5</version>
</dependency>
Вы можете разделить определения шагов.
Вот так:
public class TestStepsOne {
// Same as above, without the nested one
}
и второй класс:
public class TestStepsTwo {
private final TestStepsOne testStepsOne;
public TestStepsTwo(TestStepsOne testStepsOne) {
this.testStepsOne = testStepsOne;
}
@Given("the user is logged in")
public void loginSuccessfully() throws Throwable {
testStepsOne.enterUsernamePassword();
testStepsOne.clickLoginButton();
testStepsOne.isLoggedIn();
}
}
<сильный>3. Использование cuke4duke
-> подробности здесь , включая примеры
Вот так:
public class CallingSteps extends Steps {
public CallingSteps(StepMother stepMother) {
super(stepMother);
}
@When("^I call another step$")
public void iCallAnotherStep() {
Given("the user is logged in"); // This will call a step defined somewhere else.
}
}
Надеюсь это поможет
person
Daniel Fintinariu
schedule
13.08.2017