Les étapes imbriquées se réfèrent à l'appel d'étapes définies dans une étape "principale". Dans votre exemple, le premier scénario a la fonctionnalité de connexion, qui peut/peut être utilisée dans tous les autres scénarios nécessitant que l'utilisateur soit connecté.
Ainsi, le deuxième scénario aura un pas Given
qui appelle l'action de connexion/étapes du premier scénario. Il existe plusieurs façons de le faire:
1. Si vous définissez ces étapes dans la même classe, il suffit d'appeler les mêmes méthodes dans une étape/méthode différente.
Comme si:
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();
}
}
Maintenant, vous pouvez utiliser le Given the user is logged in
dans un scénario, et il exécute l'action de connexion.
2. A l'aide PicoContainer -> détails here
D'abord, vous devez ajouter ces dépendances à vospom.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>
Vous pouvez séparer vos définitions étape.
Comme si:
public class TestStepsOne {
// Same as above, without the nested one
}
et deuxième classe:
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. En utilisantcuke4duke
-> Détails here, comprend des exemples
Comme si:
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.
}
}
Espérons que cela aide
Merci pour l'explication. Je voudrais essayer d'utiliser pico container. Pour l'utiliser, devrais-je juste ajouter la dépendance et avoir un constructeur paramétré? Comment ça marche? De plus, mon appel CommonSteps (ou la classe TestStepsOne dans votre exemple) a un constructeur paramétré. Cela sera-t-il géré? – kav12345
S'il vous plaît jeter un oeil sur le site lié picocontainer, il explique mieux que je ne pouvais dans un commentaire (fournit également des exemples de mise en œuvre). –