2017-02-05 3 views
1

J'automatise un système utilisant BDD avec Serenity + Cucumber-jvm, et j'ai quelques cas, que la même étape peut être utilisée comme n'importe quelle définition d'étape de mot-clé. Exemple:Même étape en utilisant différentes définitions d'étape Serenity Cucumber

Given something 
When do something 
Then other thing 
And do something 

Comme vous pouvez le voir, do something est utilisé à la fois when et then, mais si je définis la même méthode avec ces 2 annotations:

@When("do something") 
@Then("do something") 
public void doSomething() { 
} 

Je reçois l'erreur suivante:

cucumber.runtime.DuplicateStepDefinitionException: Duplicate step definitions in ... 

Comment puis-je résoudre ce problème

Répondre

0

Pour le concombre Le mot-clé devant une définition d'étape (Given, When, Then, And ..) ne fait aucune différence pour la clarté lexicale et la beauté. Cela dit quand vous faites

@When("do something") 
@Then("do something") 

équivaut à:

@When("do something") 
@When("do something") 

ou

@Then("do something") 
@Then("do something") 

donc de ne pas obtenir les définitions étape en double, vous avez juste besoin de regarder le texte non le mot-clé:

1

"Given" décrit le contexte dans lequel le scénario a lieu. Il décrit soit un état, ou il décrit quelque chose que s'est produit. Donc, exprimez-le dans le présent continu ou dans le passé.

Given the invoice is two weeks late <-- continuous present 
Given the invoice was submitted  <-- past 

Vous remarquerez également qu'il ne dit rien au sujet de la personne qui a soumis la facture. C'est bien pour le contexte, parce que cela n'a pas d'importance. Nous appelons cela la voix "passive" par opposition à la voix "active".

"Quand" décrit un événement qui se produit. J'aime mettre cela dans le présent, la voix active. "Le chien a mordu le garçon" est la voix active. "Le garçon a été mordu" est passif puisqu'il ne mentionne pas qui l'a fait. En mentionnant qui le fait, nous rappelons aux gens qu'un utilisateur est impliqué, même si cet utilisateur est un autre système. "Then" décrit ce qui doit se passer, dans ce contexte, pour cet événement. J'aime utiliser le mot «devrait», qui est un conditionnel. C'est aussi dans la voix passive parce que le "quand" devrait couvrir comment c'est arrivé.

Then the invoice should be marked as paid 
Then I should receive an email <-- "I" am not the doer so this is still passive voice 

Le mot «devrait» a un avantage supplémentaire. À l'époque du développement de Waterfall, nous essayions d'obtenir toutes les exigences, mais nous ne l'avons jamais vraiment réussi. En utilisant le mot «devrait», nous encapsulons l'idée que l'incertitude existe toujours. Il encourage les gens à se demander si les exigences sont exactes, et face à l'évolution de la technologie et de l'innovation, si elles sont exactes.Il est plus facile de changer une idée quand elle n'utilise pas «doit» ou «volonté», car ce sont des mots qui expriment la certitude, et si vous êtes convaincu que quelqu'un d'autre est certain de quelque chose, vous êtes moins susceptible de repousser . En repoussant et en faisant d'autres suggestions, nous obtenons «l'exploration par l'exemple», et c'est le précurseur de la spécification ou du test par l'exemple, qui sont de bons sous-produits. Idéalement, vous parlerez à travers plus de scénarios que vous n'en garderez réellement, et déciderez lesquels sont dans et hors de portée. Le mot «devrait» aide vraiment avec cela, et le garder quand vous capturez ces scénarios et les écrivez aide aussi. Et, bien sûr, il est utile de différencier "Given" et "Then" (mais j'espère pas "When" puisque cela sera formulé dans la voix active de toute façon).

Donc, si je devais utiliser votre « faire quelque chose » par exemple, je pourrais dire:

Given something was done 
When someone does something 
Then something else should have happened. 

Maintenant, aucun de vos étapes de scénario sont similaires, et vous avez précisé ce que vous entendez vraiment par eux, aussi.

J'ai écrit a blog post sur cela il y a un certain temps si cela aide comme référence.

+0

Oui, ce que Liz a dit. –