我想使用java在Cucumber的步骤定义中插入预定义的字符串。这就是我所拥有的:
Java 代码
public String temp = "hello";
//insert temp into my step:
@Then("^the "+temp+" should be empty$")
public void the_should_be_empty() throws Throwable {
//do things
}
但我一直收到错误:
“注释属性Then.value的值必须是常量 表述“
那么,如何插入字符串我的捕获步骤?
=============
我正在尝试在我的许多BDD步骤定义中使用一组“全局关键字”。因此,当我添加一个新的“全局关键字”时,它将在我的所有BDD中进行更改。例如,(red|yellow|green)
可用于10个不同的BDD步骤,我想添加blue
而不更改所有10个步骤。相反,我想要一个包含列表的String变量,然后将此变量插入到我的BDD中。
答案 0 :(得分:4)
简短的回答是:"你没有"。
注释中的值必须是常量。它不能是运行时构建的东西。
Cucumber匹配Java和场景之间的步骤的方法是使用您在注释中定义的正则表达式。如果值是构造运行时,则该过程失败。 Cucumber运行器将找到并使用步骤实现中找到的所有正则表达式,然后搜索要素文件以使代码与场景步骤匹配。
这就是为什么你不能构建与运行时匹配的字符串。
理解为什么要构建字符串运行时会很有趣。你想要实现什么目标? 创建许多不同字符串的结果是,您的方案中必须有许多不同的步骤才能匹配。对我而言,感觉你有些误解了。请分享您想要达到的目标,也许我们可以帮助您采用其他方法。
答案 1 :(得分:2)
您可以使用custom parameter type来实现。
一旦定义,您的步骤定义将如下所示:
@Then("the {color} should be empty")
public void the_should_be_empty(Color color) throws Throwable {
//do things
}
现在,如果颜色列表发生更改,则不必编辑每个stepdef。