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
相关产品推荐
相关产品推荐

