java - 如何在最新的 4.x 版本中将列表传递给 cucumber-jvm stepdef
问题描述
我有以下枚举
public enum Color {
RED, GREEN, BLUE
}
在功能文件中,我有以下内容
Then verify policy status flow:RED, GREEN, BLUE
在步骤文件中,我写道:
@Then("verify policy status flow:{colorList}")
public void verifyPolicyStatusFlow(List<Color> myColors) {
}
在实现TypeRegistryConfigurer的类中,我写了
typeRegistry.defineParameterType(new ParameterType<List>(
"colorList",
"(RED|GREEN|BLUE)(,\b(RED|GREEN|BLUE))*",
List.class,
new Transformer<List>() {
@Override
public List<Color> transform(String s) {
List<Color> collect = Arrays.stream(s.split(", ")).map(e -> Color.valueOf(e)).collect(Collectors.toList());
return collect;
}
})
);
但它不起作用。如果我将正则表达式模式更改为“([^']*)” ,它就可以工作。但我希望正则表达式尽可能地受到限制
解决方案
如果您想匹配颜色列表 RED、GREEN、BLUE,只有您尝试的图案的第一组将匹配 3 次,而第二组图案不匹配,因为没有匹配空格。
如果匹配空格,可以省略单词边界\b
(RED|GREEN|BLUE)(, (RED|GREEN|BLUE))*
如果您没有引用代码中的组,您也可以将它们设为非捕获:
(?:RED|GREEN|BLUE)(?:, (?:RED|GREEN|BLUE))*
该模式([^']*)
将捕获匹配 0+ 次而不是 a 的组'
,并且还将匹配一个空字符串。
推荐阅读
- tensorflow - Tensorflow:经过一系列卷积和反卷积后得到相同的张量
- python - 将 Python 请求库转换为 Nodejs
- r - R嵌套for循环结构,用于两个变量的所有组合
- swift - Swift 5. 'withUnsafeBytes' 已弃用:使用 `withUnsafeBytes
(...) 反而 - java - GeoFire Firebase 查询无法在 ArrayList 中存储用户 ID
- scala - Upickle:读取可能是 String 或 Int 的属性作为 String
- java - 将 Java 代码转换为 Kotlin 代码时出错
- ros - 将 C++ 包中的 ROS .msg 导入 python
- symfony - 重定向路由时如何传递隐藏参数?(与 POST ?)
- react-native - 是否有必要将 redux 表单字段包装在表单标签中?