有没有人知道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
}
...但我真的没有找到一个很好的解决方案
答案 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
}
当然,这个解决方案会在方法上产生一个额外的参数,除非你计划在过去(给定)或现在(当)执行步骤时遵循不同的路径,否则这个参数是无用的。