【问题标题】:Why does Cucumber raise AmbiguousStepDefinitionsException?为什么 Cucumber 会引发 AmbiguousStepDefinitionsException?
【发布时间】:2016-03-10 23:15:25
【问题描述】:
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
我给出了 2 个不同的定义。我不确定为什么会出现这个错误。
【问题讨论】:
标签:
cucumber
cucumber-jvm
【解决方案1】:
您收到此错误是因为
/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$/
我通常认为要求步骤定义与整个步骤匹配(即以^ 开始并以$ 结束)是一个好主意,直到我找到不这样做的充分理由。但如何组织步骤由您自己决定,以使它们都明确且对读者有意义。