如何在Cucumber Gherkin中使用单变量Scenario Outline并解决报错?
Cucumber Gherkin单变量Scenario Outline报错解决方法
我在Cucumber Gherkin的Scenario Outline中仅使用一个变量时,运行Feature文件出现「1 out of bounds for length」错误,但添加第二个变量(新增列及对应变量)后用例可正常执行。希望避免为了通过用例而添加整列重复字符串,询问是否可以仅用一个变量编写Scenario Outline,以及如何操作。
报错的示例(示例A)
Feature: Is this a valid fruit? Scenario Outline: Is this a fruit When I ask whether <fruit> is a fruit Then I should see "Yes this is a fruit" message Examples: | fruit | | Kiwi | | Apple | | Pineapple |
运行时提示错误:"1 out of bounds for length"
冗余的可行写法(示例B)
Feature: Is this a valid fruit? Scenario Outline: Is this a fruit When I ask whether <fruit> is a fruit Then I should see <message> message Examples: | fruit | message | Kiwi | "Yes this is a fruit" | Apple | "Yes this is a fruit" | Pineapple | "Yes this is a fruit"
解决方法
单变量的Scenario Outline本身是完全合法的Gherkin语法,报错并非因为单变量导致,可从以下几点排查修复:
- 检查Cucumber版本:部分旧版本的Cucumber存在单列Examples表格的解析bug,升级到稳定版本(如Cucumber-JVM 7.x及以上、Cucumber-Ruby 6.x及以上)即可解决。
- 核对步骤定义匹配:确保
Then步骤的正则表达式正确匹配固定字符串,不要错误地定义为接收参数。例如,对应的步骤定义应该是:
而非错误地写成需要接收参数的形式:// Java示例 @Then("I should see \"Yes this is a fruit\" message") public void verifyFruitMessage() { // 断言逻辑 }// 错误示例,会导致参数匹配异常 @Then("I should see {string} message") public void verifyMessage(String message) { // 断言逻辑 } - 检查语法格式:确认Examples表格的竖线位置正确,没有多余的空格、换行或语法错误,确保表格结构规整。
修正后,示例A的写法即可正常运行,无需添加冗余的变量列。
内容的提问来源于stack exchange,提问作者Suzy
相关产品推荐
相关产品推荐

