在BDD Java中,如何一次找出所有冲突的步骤定义?(不在要素文件中使用它们)

在BDD Java中,如何一次找出所有冲突的步骤定义?(不在要素文件中使用它们),java,cucumber,bdd,Java,Cucumber,Bdd,十、 下面的Y和Z是3个不同的Java包,其中包含BDD步骤定义 @CucumberOptions( features = "classpath:features_for_XYZ", glue = {"X", "Y", "Z"}, 由于X、Y和Z由不同的团队开发,因此存在步骤定义冲突的可能性(即特征文件中的一个步骤可能与多个步骤定义Java函数匹配)。当前,仅当相关步骤实际用于要素文件时,才会检测到

十、 下面的Y和Z是3个不同的Java包,其中包含BDD步骤定义

@CucumberOptions(
    features = "classpath:features_for_XYZ",
    glue = {"X", "Y", "Z"},
由于X、Y和Z由不同的团队开发,因此存在步骤定义冲突的可能性(即特征文件中的一个步骤可能与多个步骤定义Java函数匹配)。当前,仅当相关步骤实际用于要素文件时,才会检测到此类碰撞

“cucumber.runtime.AmbiguousStepDefinition异常:✽.下面的MN事件(a/c/d.feature:80)匹配多个步骤定义:


在要素文件中使用所有冲突的步骤定义之前,是否有方法识别它们?

对于每个步骤定义,用与正则表达式匹配的文本替换正则表达式,然后查看它是否与任何其他步骤定义匹配。您需要自己编写一个框架来实现这一点,因为Cucumber中没有简单的方法(例如,您需要小心编写文本,其中另一个步骤将获取一个数字;检查需要以两种方式进行,并且我不认为可以将替换自动完成,以使其详尽无遗)

唯一的其他方法是通过检查

我不知道你为什么要这么做。我们在BDD中使用“应该”一词的部分原因是,系统“应该”做的事情会随着时间的推移而改变,“应该”鼓励更多的质疑,而不是“必须”或“意志”。这意味着功能文件将发生更改,并且需要对其进行维护。如果一个步骤在使用时匹配多个步骤定义,则在发现该步骤时就足以对其进行更改

我很好奇你面对的是什么情况,这意味着它不是


您可以根据场景描述的功能和上下文分离功能文件和步骤定义,并只包含与相关上下文匹配的步骤,从而最大限度地减少这些冲突。

感谢您的回复。但这不起作用,因为一个步骤def可以指定特定的单词,而另一个步骤def(在不同的功能区域)使用regex。e、 g.“following thing appeaces”vs“following([\\w]*)([\\w]*)”,这就是为什么我说必须双向执行,并替换正则表达式。这肯定不容易。这是因为你有一个缓慢的反馈循环——通宵运行还是什么?因为如果是这样,请修复该问题。。。