让我说我有这句话:
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")
但我觉得它看起来很糟糕。这只是一个示例短语,因此解决方案不是将文本更改为更通用。
答案 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);