2015-10-02 21 views
1

可以说我有这句话: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

从外部的角度来看,$ 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); 
+1

我会着手创建自己的解析器来支持我需要的东西,感谢您的帮助。 – user1593846

+0

我想说你可以扩展RegexPrefixCapturingPatternParser并重写转义标点符号,但我很好奇,看看你是如何创建它的。让我们知道 – Chrizt0f