在Android上使用Cucumber时出现AmbiguousStepDefinitionsException

时间:2017-05-03 13:41:56

标签: java android cucumber tdd bdd

我使用日志获取AmbiguousStepDefinitionsException:

cucumber.runtime.AmbiguousStepDefinitionsException: ✽.Given I am logged out(features/performance.feature:7) matches more than one step definition:
^I am logged out$ in PerformanceListSteps.i_am_logged_out()
^|I should be on |the list page$ in LoginSteps.i_should_be_on_the_list_page()

在进行黄瓜测试时。我对这种态度很新鲜,我很乐意帮忙。

1 个答案:

答案 0 :(得分:1)

问题出在第二个正则表达式模式:

^|I should be on |the list page$

管道(|)符号是一个更改。所以这个正则表达式基本上意味着它将匹配其中一个替代方案:

  • 一个空字符串(位于第一个|左侧)
  • I should be on
  • the list page

匹配空字符串的正则表达式可以匹配0个字符,因此它将匹配任何字符串。这在某种程度上取决于实现,但在Cucumber-JVM的情况下,我确认如果我在其中一个步骤定义中添加了类似的正则表达式模式,则它与项目中的所有步骤相匹配。

解决方案

这里最好的解决方案是从正则表达式中删除管道,因为(通常)您希望正则表达式尽可能具体,只留下进入步骤定义的变量的变体。

所以你需要的是将正则表达式模式更改为:

^I should be on the list page$

它会在任何Gherkin关键字(Given / When / Then等)之后与该语句匹配,例如:

Then I should be on the list page