You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cucumber无法识别feature文件行首制表符导致断言失败求助

根因说明

Cucumber解析Gherkin表格时默认自动修剪每个单元格首尾的空白字符(空格、制表符等),你写在feature表格里的前导制表符在读取为expectedLines时已经被移除,因此和带前导空白的实际内容匹配失败。

解决方案

方案1:调整断言逻辑(优先推荐,适用于不需要严格校验空白格式的场景)

如果仅校验文本核心内容,不需要严格匹配空白数量,可先对对比内容做规范化处理后再断言:

lines.forEachIndexed { i, _ -> 
    // 仅忽略首尾空白用这行
    // assertEquals(expectedLines[i].trim(), lines[i].trim())
    // 同时忽略中间连续多空白的差异用下面的代码
    val normalizedExpected = expectedLines[i].trim().replace(Regex("\\s+"), " ")
    val normalizedActual = lines[i].trim().replace(Regex("\\s+"), " ")
    assertEquals(normalizedExpected, normalizedActual)
}

方案2:关闭Cucumber表格自动修剪(适用于需要严格校验空白的场景)

如果业务要求必须匹配首尾/中间空白,可在步骤定义读取DataTable时关闭自动trim配置:

// 步骤定义示例,第二个参数传入false即可关闭单元格空白修剪
Given("输出结果预期为:") { dataTable: DataTable ->
    expectedLines = dataTable.asList(String::class.java, false)
}

方案3:feature表格内转义保留空白

如果不方便修改代码,可在feature文件中用引号包裹需要保留空白的单元格内容,部分Cucumber版本会保留引号内的全部字符,读取后自行去除引号即可:

| "          335374655.87    Files to be generated compliant with SLA figures    0" |

内容的提问来源于stack exchange,提问作者almageek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 15:06:02