是否可以在 jbehave 步骤中使用通配符?

Is it possible to have wildcards in the jbehave step?

假设我有这个短语:

When I press save the homepage should be updated

我可以在我的步骤中以某种方式将 'homepage' 声明为通配符吗

所以我的步骤是这样的:

@When("I press save the * should be updated")

我可以用丑陋的方式来做,只是将它保存为参数我不这样使用

@When("I press save the $page should be updated")

但我觉得它看起来很糟糕。这只是一个示例短语,因此解决方案不是将文本更改为更通用。

从外部的角度来看,$page 参数看起来并不傻,因为它让用户了解步进模式保存的内容,但那只是我。您可以使用 pattern variants 添加多个选项(例如页面、主页、主屏幕)。

但要回答您的问题,默认无法做到这一点。默认 configuration, Jbehave uses the RegexPrefixCapturingPatternParser to compile and execute a step pattern matching regex (through the RegexStepMatcher)。不幸的是,在编译步骤模式正则表达式之前,步骤中的正则表达式被转义:

RegexPrefixCapturingPatternParser.java:

public StepMatcher parseStep(StepType stepType, String stepPattern) {
    String escapingPunctuation = escapingPunctuation(stepPattern);
    List<Parameter> parameters = findParameters(escapingPunctuation);
    Pattern regexPattern = buildPattern(escapingPunctuation, parameters);
    return new RegexStepMatcher(stepType, escapingPunctuation, regexPattern,
            parameterNames(parameters));
}

private String escapingPunctuation(String pattern) {
    return pattern.replaceAll("([\[\]\{\}\?\^\.\*\(\)\+\\])",
                    "\\"); }

可能还值得一提的是,模式解析器使用 $ 的默认前缀来区分步骤模式参数的开始。

如果您非常反对在步骤模式中包含该参数。您可以使用自己的 StepPatternParser 覆盖默认配置,例如

configuration().useStepPatternParser(myCustomParser);