2017-08-13 1 views
1

J'écris des cas de test de Gherkin et des définitions d'étapes Java dans mon projet. Je suis nouveau à Gherkin et j'essaie de comprendre la signification des étapes imbriquées. Pouvez-vous s'il vous plaît m'aider à comprendre si le 2ème scénario implique des étapes imbriquées?Gherkin Nested Steps sens

Dans mon exemple, je voudrais réutiliser le 1er code de scénario dans la logique du second scénario. Existe-t-il un meilleur moyen de réutiliser ou de réécrire la logique? Note: L'exemple ci-dessous est écrit juste pour expliquer ma question. Ce n'est peut-être pas un bon Gherkin.

Background: 
    Given The application is opened 

Scenario: Successful Login 
    Given the user name and password are entered 
    When login button is clicked 
    Then user login is successful 

Scenario: Add Address Successful 
    Given user login is successful 
    And Add Address button is clicked 
    And user city, country are entered 
    when Submit button is clicked 

Répondre

3

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

+0

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

+0

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). –