Cucumber 同一步骤定义的多个步骤

Cucumber 同一步骤定义的多个步骤,cucumber,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 WhenTheUserAddsATot

有人知道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在匹配步骤和步骤定义时没有考虑关键词(给定、何时等)。Cucumber只在步骤定义中查找正则表达式,因此我只需要一个步骤定义(给定或何时)。意义

也将匹配

[Given(@"the user adds a (.*) to the cart")]
我的问题是我们使用过去时态和现在时态

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

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

[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
}

。。。但我并不认为这是一个好的解决方案

我在cucumber repo中找到了多个关于这个主题的讨论,但大多数都是针对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
}

当然,此解决方案会在方法上生成一个附加参数,除非您计划在过去(给定)或现在(何时)执行该步骤时遵循不同的路径,否则该参数是无用的。

我理解这并不是在回答您的问题,只是以防万一,如果您想要切换到(IMO superior)combo Python Behave,然后,您可以使用genericstep关键字代替gived、WHEN或then。
[Given(@"the user add(s|ed) a (.*) to the cart")]
public void WhenTheUserAddsATotheCart(string tense, string product){
    ////code that adds to the cart
}