我想要相同的Gherkin句子(有参数和没有参数):
Gherkin与参数:
When a 'notify' message is sent to the green box with the properties.
|type|message|
|error|The error message|
没有参数的小黄瓜:
When a 'notify' message is sent to the green box with the properties.
Java(黄瓜):
@When("^a '(.*)' message is sent to the green box with the properties.$")
public void hello(String name, List<GherkinCondition> conditions) {
...
}
我有一个错误,因为java方法是用2个参数声明的,在“没有参数”的情况下,我只有一个。
堆栈跟踪:
cucumber.runtime.CucumberException: Arity mismatch: Step Definition 'steps.CommonSteps.hello(String,GherkinCondition>) in file:/C:/workspace/xxxxx/java/target/classes/' with pattern [^a '(.*)' message is sent to the green box with the properties.$] is declared with 2 parameters. However, the gherkin step has 1 arguments [notify].
答案 0 :(得分:3)
黄瓜步骤定义不支持可选参数。
您可以编写两个不同的步骤定义,也可以为第二个案例提供一个空的数据表。
When a 'notify' message is sent to the green box with the properties.
|type|message|
甚至
When a 'notify' message is sent to the green box with the properties.
|||
答案 1 :(得分:0)
我创建了一个PR来解决此问题:https://github.com/cucumber/cucumber-jvm/pull/1056
小黄瓜脚本测试:
@hello
Feature: hello (Function to validate the environment.)
Scenario Outline: Function to validate the environment.
Given me a hello, please. Best Regards '<author>'.
Given me a hello, please. Best Regards '<author>'.
|key|expected|actual|
Given me a hello, please. Best Regards '<author>'.
|key|expected|actual|
|zip|35000|<zip>|
|city|Rennes|<city>|
Given me a bye, please. Best Regards '<author>'.
Given me a bye, please. Best Regards '<author>'.
|zip|<zip>|
|city|<city>|
Given me a cat, please. Best Regards '<author>'.
Examples:
#Begin Examples#
|author|zip|city|
|Jenkins Q1|35000|Rennes|
|Jenkins Q2|35000|Rennes|
#End Examples#
Java黄瓜代码:
@Given("^me a hello, please. Best Regards '(.*)'.$")
public void hello(String name, List<GherkinCondition> conditions) {
int i = 0;
for (GherkinCondition gherkinCondition : conditions) {
i++;
logger.info(String.format(" expected contition N°%d=%s", i, gherkinCondition.getExpected()));
logger.info(String.format(" actual contition N°%d=%s", i, gherkinCondition.getActual()));
}
logger.info("Hello " + name + "!");
}
@Given("^me a cat, please. Best Regards '(.*)'.$")
public void hello(String name) {
logger.info("Take my cat " + name + "!");
}
@Given("^me a bye, please. Best Regards '(.*)'.$")
public void bye(String name, Map<String, String> params) {
int i = 0;
for (Map.Entry<String, String> entry : params.entrySet()) {
i++;
logger.info(String.format(" Key N°%d: %s Value:%s", i, entry.getKey(), entry.getValue()));
}
logger.info("Bye " + name + "!");
}
答案 2 :(得分:0)
这对我有用。我可以通过IND或USA。注意:如果您没有通过任何IND,USA,这将无效。
@When("^I search (.*) (IND|USA)? in Database$")
public void searchInDatabase(String name, String country){
if(country.equals("IND"))
dbObj.searchDatabase(name, true);
else if(country.equals("USA"))
dbObj.searchDatabase(name, false);
else
dbObj.searchDatabase(name, true);
}
答案 3 :(得分:0)
我得到了问题的答案: -
@When(&#34; ^我在(IND | USA)搜索(。*)?数据库$&#34;)
我正在寻找美国或IND的可选参数。以上行解决我的问题。 (和|
之后需要空格答案 4 :(得分:0)
我正在这样做:
@Then("^Something is (not )?counted$")
public void somethingCounted(String optional) {
//
}
正则表达式同时匹配“已计算在内”和“未计算在内”
对于第一种情况,您将获得“ not”值,对于第二种情况,您将获得null。