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

时间:2015-10-02 13:53:01

标签: wildcard jbehave

让我说我有这句话:

When I press save the homepage should be updated

我可以在我的步骤中宣布'主页'以某种方式作为通配符

所以我的步骤看起来像这样:

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

我可以用丑陋的方式做到这一点,只是把它保存为我不能这样使用的参数

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

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

1 个答案:

答案 0 :(得分:1)

从外部角度来看,$ page参数看起来并不愚蠢,因为它让用户知道步骤模式保存了什么,但这只是我。您可以使用pattern variants添加多个选项(例如页面,主页,主屏幕)。

但要回答您的问题,默认情况下无法执行此操作 。在默认configuration,Jbehave使用RegexPrefixCapturingPatternParser编译并执行匹配正则表达式的步骤模式(通过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("([\\[\\]\\{\\}\\?\\^\\.\\*\\(\\)\\+\\\\])",
                    "\\\\$1"); }

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

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

configuration().useStepPatternParser(myCustomParser);