Cucumber Gherkin BDD中使用序数词的其他实现方式咨询
Cucumber Gherkin BDD 序数词匹配的替代实现方案
除你提到的硬写后缀匹配的方案外,还有以下3种更灵活的实现方式:
- 方案1:自定义全局参数类型(最推荐)
Cucumber 所有语言实现版本都支持自定义参数类型,你可以全局注册一个ordinal参数,自动匹配所有格式的序数词并转换为整数,不需要在每个步骤定义里重复写后缀规则。
示例(Java 版代码):
// 注册自定义序数参数 @ParameterType("(\\d+)(?:st|nd|rd|th)") public int ordinal(String numPart) { return Integer.parseInt(numPart); }
步骤定义直接调用参数即可:
When("I add something into {ordinal} block", (Integer blockIndex) -> { // 直接拿到转换后的整数下标使用 });
如果需要同时兼容纯数字和序数词两种写法,把正则改成(\\d+)(?:st|nd|rd|th)?即可。
- 方案2:单步骤自定义正则匹配
如果只有少数几个步骤需要适配序数词,不需要全局注册参数,可以直接在步骤定义里写完整正则捕获数字部分,忽略后缀:
示例(JS 版代码):
When('I add something into (\\d+)(?:st|nd|rd|th) block', function (blockIndex) { // blockIndex 为捕获到的数字字符串,自行转成整数即可 })
- 方案3:利用 Cucumber 数据转换钩子
部分语言版本(如Ruby、Python)支持全局数据转换钩子,你可以注册一个钩子,所有匹配到序数词格式的参数自动转换为整数,无需修改步骤定义的占位符。
示例(Ruby 版代码):
Transform /^(\d+)(st|nd|rd|th)$/ do |num| num.to_i end
之后步骤定义仍然可以用原生{int}占位符,序数词格式的参数会被自动转换为整数传入。
内容的提问来源于stack exchange,提问作者Lukáš Secký
相关产品推荐
相关产品推荐

