0
votes

Concombre BDD différentes caractéristiques nécessitant une étape similaire

Dans mon application, j'ai deux fichiers de fonctionnalités:

public class CopyFeature {

    @Qualifier("moverB")
    @Autowired
    private IFileMover mover;


    @Given("check file is available")
    public void load() {

    }

    @When("the file is there at the location")
    public void moveFile() {
        output= mover.move(info);

    }   
}

Pour ceux-ci, j'ai des fichiers de définition en deux étapes:

Fonctionnalité de traitement:

public class ProcessingFeature {

    @Qualifier("moverA")
    @Autowired
    private IFileMover mover;


    @Given("check file is available")
    public void load() {

    }

    @When("the file is there at the location")
    public void moveFile() {
        output= mover.move(info);

    }   
}

Copier la fonctionnalité:

processing.feature
copy.feature

Dans mes deux fichiers de fonctionnalités, j'exécute check file is available en tant que @Given étape. Ma première question est, ce sont des définitions d'étape identiques qui se trouvent dans les deux fichiers de définition d'étape. Quel est le modèle correct pour que ce code ne soit pas dupliqué et que les deux fonctionnalités puissent l'utiliser?

Deuxièmement, les deux fonctionnalités exécutent le fichier est là à l'emplacement mais on utilise MoverA & the Other utilise MoverB . Mais l'idée reste la même. Encore une fois, je n'aime pas la duplication, alors comment puis-je réutiliser au mieux peut-être par le biais d'une abstraction?

Bien sûr, j'obtiens une exception cucumber.runtime.DuplicateStepDefinitionException: définitions d'étape en double mais je suis curieux de voir quel est le modèle correct pour résoudre ce genre de problèmes


0 commentaires

3 Réponses :


0
votes

Les étapes ne peuvent être définies qu'une seule fois. Les définitions d'étape sont globales et non spécifiques à un scénario ou à une fonctionnalité. Puisqu'une étape ne peut avoir qu'une seule définition, la duplication de code n'est pas un problème.


0 commentaires

0
votes

Vous devez lire la page suivante de Cucumber: https://cucumber.io/ docs / gherkin / step-organisation / Cela vous aidera à organiser correctement votre code de colle. Comme l'a dit Greg, les définitions d'étape sont globales, c'est un anti-modèle pour créer des étapes spécifiques aux fonctionnalités: https://cucumber.io/docs/guides/anti -patterns / # feature-linked-step-definitions

Dans votre fichier d'entités, je pense qu'il y a une confusion entre les étapes When (action: c'est-à-dire copier le fichier ou traiter le fichier) et Then (résultat attendu : le fichier doit être à quel emplacement). Vos définitions d'étape devraient ressembler davantage à:

@When("I copy the following file:(.*)")
public void copyFile(String fileName) {
    xxxx calling system under test xxxx
}   

@When("I process the following file:(.*)")
public void processFile(String fileName) {
    xxxx calling system under test xxxx
}   

@Then("the file is at the following location:(.*)")
public void checkFileExistence(String fileLocation) {
    Assert.assertTrue(xxxxx);
}   

Pour partager l'état entre les étapes, vous pouvez utiliser le modèle d'objet World: cf https://cucumber.io/docs/cucumber/state/


0 commentaires

0
votes

C'est un inconvénient lors de l'utilisation d'un fichier texte brut et d'un mappage d'étapes pour l'implémentation BDD. Une alternative à ce problème et à des problèmes similaires en raison de la couche de fichier d'entités supplémentaire est l'utilisation de implémentation pure Java du scénario . Cela éliminera une couche supplémentaire de fichiers d'entités et certainement des fichiers de définition d'étape et vous permettra de suivre le développement axé sur le comportement.


0 commentaires