为什么Cucumber会引发AmbiguousStepDefinitionsException?

时间:2016-03-10 23:15:25

标签: cucumber cucumber-jvm

cucumber.runtime.AmbiguousStepDefinitionsException: ✽.Given I am an admin user(src/test/resources/features/alerts.feature:9) matches more than one step definition:
  I am an admin in LoginStepDefinitions.iAmAnAdmin()
  ^I am an admin user$ in AlertsStepDefinitions.iAmAUser()

    at cucumber.runtime.RuntimeGlue.stepDefinitionMatch

我给出了两个不同的定义。我不确定为什么会出现这个错误。

1 个答案:

答案 0 :(得分:10)

您收到此错误是因为

/I am an admin/ # in LoginStepDefinitions.iAmAnAdmin()

/^I am an admin user$/ # in AlertsStepDefinitions.iAmAUser()

两者匹配

"I am an admin user" # at src/test/resources/features/alerts.feature:9

第一个正则表达式匹配第二个正则表达式所做的所有内容,因此与第二个正则表达式匹配的任何步骤都将匹配两个并导致此错误。

您可以通过使第一个正则表达式不是第二个正则表达式的子集来修复它。一种选择是将第一个正则表达式更改为

/^I am an admin$/

我一般认为最好要求步骤定义与整个步骤相匹配(即以^开头,以$结束),直到找到一个很好的理由不。但是,由您来决定如何组织您的步骤,以便他们明确无误并且对读者有意义。