在Cucumber步骤的运行时将关键字解析为其值

时间:2016-09-26 16:13:35

标签: java cucumber-jvm

当我在serach文本字段中输入名称foo_SCENARIO_UUID时

实现:

@When("^I enter the name "([^"]*)" in serach text field$")
public void i_enter_someText_in_search_textField(String searckKey) throws Throwable {
    pageCollection.searchPage().enterKeyword(searchKey);
}

我的问题是如何在我的功能中使用'SCENARIO_UUID'的任何地方设置System.currentTimeMillis()的值。

无论如何,我可以覆盖解析这些值的Cucumberoptions,而不是在每个步骤实现中编写逻辑。

我们在Jbehave中有此选项

@Override
public Configuration configuration() {
    if (config != null)
        return config;

    config = useParameterConverters(new ParameterConverters()
                                   .addConverters(new StringConverter()));

我无法在Cucumber中找到任何此类选项,以确保每次运行测试时都会搜索新字符串:(

1 个答案:

答案 0 :(得分:0)

public static class Scenario_Uuid_transform extends Transformer<String> {

    @Override
    public String transform(String aString) {
        if (aString.endsWith("_SCENARIO_UUID")) {
            return Long.toString(System.currentTimeMillis());
            // Or if you wanted foo_ prepended
            // return aString.replaceFirst("SCENARIO_UUID", Long.toString(System.currentTimeMillis()));
        else {
            return aString;
        }
    }
}


@When("^I enter the name "([^"]*)" in serach text field$")
public void i_enter_someText_in_search_textField(@Transform(Scenario_Uuid_transform.class) String searckKey) throws Throwable {
    pageCollection.searchPage().enterKeyword(searchKey);
}

请参阅Class Transformer以获取解释。