如何在Cucumber-JVM中的步骤定义中插入字符串变量?

时间:2016-11-04 18:25:17

标签: java cucumber bdd cucumber-jvm cucumber-java

我想使用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中。

2 个答案:

答案 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。