Cucumber版本迁移后步骤定义正则转义报错求助
解决Cucumber新版本步骤定义报错的思路
问题根源是新版Cucumber默认使用Cucumber表达式替代了旧版的正则表达式语法,你原来的步骤定义里用了(\w+)这种正则写法,在Cucumber表达式里会被识别为非法转义,所以触发报错。
下面是两种可行的解决方法:
方法一:改用Cucumber表达式(官方推荐)
Cucumber表达式有内置的类型匹配器,{word}可以匹配字母、数字和下划线组成的字符串,和你原来的\w+效果完全一致。修改步骤定义的注解即可:
@Given("I link signaal {word} with another signal {word}") public void iLinkSignals(Reference signaalRef1, Reference signaalRef2){ // 原有业务逻辑不变 WerkInstructie signaal1 = signaalContext.getSignal(signaalRef1); WerkInstructie signaal2 = signaalContext.getSignal(signaalRef2); LinkedWerkInstructie linkedWerkInstructie = new LinkedWerkInstructie().withWerkInstructieId(signaal2.getId()) .withWerkInstructieType(signaal2.getWIType()); this.getRestAbstractWerkInstructieDriver().addLinkedWerkInstructie(SIGNAAL_RESOURCE_PATH, signaal1.getId(), linkedWerkInstructie); }
方法二:强制使用正则表达式(兼容旧代码场景)
如果你想保留正则写法,需要给表达式加上^和$来明确标记这是正则表达式,同时注意Java中反斜杠需要转义成\\:
@Given("^I link signaal (\\w+) with another signal (\\w+)$") public void iLinkSignals(Reference signaalRef1, Reference signaalRef2){ // 原有业务逻辑不变 WerkInstructie signaal1 = signaalContext.getSignal(signaalRef1); WerkInstructie signaal2 = signaalContext.getSignal(signaalRef2); LinkedWerkInstructie linkedWerkInstructie = new LinkedWerkInstructie().withWerkInstructieId(signaal2.getId()) .withWerkInstructieType(signaal2.getWIType()); this.getRestAbstractWerkInstructieDriver().addLinkedWerkInstructie(SIGNAAL_RESOURCE_PATH, signaal1.getId(), linkedWerkInstructie); }
注意:方法二更适合临时兼容,长期来看推荐用方法一的Cucumber表达式,它更简洁易读,也符合新版Cucumber的设计方向。
内容的提问来源于stack exchange,提问作者EBruno
相关产品推荐
相关产品推荐

