根据参数类型区分黄瓜步骤定义



我有两个黄瓜步骤定义,如下所示

Map<String, Object> values = new HashMap<>();
:
:
@And("^(.+) has a value (false|true)$")
public void addValues(String key, Boolean value) {
values.put(key, value);
}
@And("^(.+) has a value (.+)$")
public void addValues(String key, String value) {
values.put(key, value);
}

在第一步定义中,我想将值设置为boolean第二个定义中的值为String但是我得到了io.cucumber.core.runner.AmbiguousStepDefinitionsException

语句

Given name has a value Manu
And isMajor has a value true
:
:

有人能告诉我如何区分步骤定义与相同的语句,但有不同的参数类型

我的黄瓜版本是6.8.1

修改如下:

^(.+) has a value (.+)$

:

^(.+) has a value ((?!true|false).+)$

这将消除歧义。

注:-改变后,你的整个类看起来像:

public class ClassicStepDefs {
Map<String, Object> values = new HashMap<>();
@And("^(.+) has a value ((?!true|false).+)$")
public void addValues(String key, String value) {
values.put(key, value);
}
@And("^(.+) has a value (false|true)$")
public void addValues(String key, Boolean value) {
values.put(key, value);
}
}

步骤isMajor has a value true匹配两个正则表达式。所以Cucumber不知道该调用哪个方法。如果您使其他正则表达式匹配除true/false以外的任何参数,则您的步骤定义不再含糊。

你也许可以用消极的眼光看待未来,但我将把它作为练习留给其他人。

最新更新