环境:Java/IntelliJ/Cucumber
最近,我多次遇到 IntelliJ 声称步骤定义不明确,而实际上似乎没有。
cucumber.runtime.AmbiguousStepDefinitionsException: "that "saken" is a
rejected case in kommune "5000"" matches more than one step definition:
"^that "([^"]*)" is a rejected case" in SakSteps.isARejectedCase(String)
"^that "([^"]*)" is a rejected case in kommune "([^"]*)"$" in
SakSteps.isARejectedCaseInKommune(String,String)
虽然前 6 个字符串匹配,但“给定”步骤文本不相同:
"^that "([^"]*)" is a rejected case"
"^that "([^"]*)" is a rejected case in kommune "([^"]*)"$"
方法名称完全不相似:
isARejectedCase(String)
isARejectedCaseInKommune(String,String)
为什么 IntelliJ/Cucumber 声称这些是模棱两可的?
此代码之前确实有效。中间可能有一些插件更新或其他更新,但我不明白为什么它会这样?
最佳答案
在这里回答我自己的帖子:
原因是在步骤定义的末尾缺少一个“$”来标记句子的结尾。否则,它将匹配以相同单词开头的定义。示例:
When X does Y because of W
When X does Y because of W in addition to P
关于Java 和 cucumber : Strange ambiguous step definition exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54286875/