同一黄瓜步骤定义的多个步骤

时间:2018-05-10 12:37:30

标签: cucumber

有没有人知道cucumber / Java是否支持访问相同stepDefinition的多个步骤的功能?

我想要实现的目的是使用一个步骤,此刻被用作When(在另一个更复杂的测试中,当前的When变成一个前提条件)

在我之前的经验(Specflow / .Net)中,我可以使用像

这样的东西
[Given(@"the user added a (.*) to the cart")]
[When(@"the user adds a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string product){
    ////code that adds to the cart
}

如果我使用与Specflow中相同的方法,则抛出DuplicateStepDefinitionException。 因为在将步骤与步骤定义匹配时,Cucumber不会考虑关键词(Given,When等)。黄瓜只在步骤定义中查找regEx,因此我只需要一个步骤定义(给定或何时)。含义

[When(@"the user adds a (.*) to the cart")]

也会匹配

[Given(@"the user adds a (.*) to the cart")]

我的问题是我们使用过去时的给定和现在时的时态。

所以问题是:我如何对两步定义使用相同的实现?

我看到的唯一解决方案是将实现Given的方法的包含提取到另一个方法中,并在Given步骤定义和When.Something下调用它:

[Given(@"the user added a (.*) to the cart")]
public void GivenTheUserAddedATotheCart(string product){
    addToTheCart(product);
}

[When(@"the user adds a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string product){
    addToTheCart(product);
}

public void addToTheCart(String product){
////code that adds to the cart
}

...但我真的没有找到一个很好的解决方案

1 个答案:

答案 0 :(得分:1)

我在黄瓜回购中找到了围绕这个主题的多个讨论,但大多数都是针对cucumber-jvm实现的:

这是一个有争议的话题,据我所知,目前尚未对此功能提供官方支持,但有一些关于如何实现此功能的参考资料。在显示的示例中,由于步骤类似,我只是在步骤定义上扩展正则表达式以匹配两个步骤:

[Given(@"the user add(s|ed) a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string tense, string product){
    ////code that adds to the cart
}

当然,这个解决方案会在方法上产生一个额外的参数,除非你计划在过去(给定)或现在(当)执行步骤时遵循不同的路径,否则这个参数是无用的。