是否可以在 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);
假设我有这个短语:
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);