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

Java测试中cucumber.runtime.CucumberException:Arity mismatch报错是什么意思?

报错含义

Arity mismatch即参数数量不匹配。你为@When("^(Coffee|Milk|Sugar|Chocolate) is (.*)$")绑定的方法声明了4个入参,但该正则表达式只有2个捕获组,每次匹配到Gherkin的When步骤时,Cucumber只会传入2个参数(第一个是物料类型,第二个是设置的数值),传入参数数量和方法要求的参数数量不符,因此抛出该异常。
同时你将@When和@Then注解都绑定到了同一个方法上,逻辑也不符合场景执行规则:场景会依次执行4个When步骤、1个Then步骤,每个步骤都会单独触发一次绑定的方法,没有办法一次性把4个物料的数值都传入该方法。

解决方法

推荐使用成员变量暂存各物料数值,最后统一执行添加操作,修改方式如下:

  1. 首先在测试类中新增4个成员变量存储各物料的配置数值:
// 测试类成员变量
private String coffeeQty;
private String milkQty;
private String sugarQty;
private String chocolateQty;
  1. 拆分步骤定义,将物料赋值和库存添加的逻辑分开:
// 处理单物料赋值的When步骤
@When("^(Coffee|Milk|Sugar|Chocolate) is (.*)$")
public void setSingleInventory(String materialType, String qty) {
    switch (materialType) {
        case "Coffee":
            coffeeQty = qty;
            break;
        case "Milk":
            milkQty = qty;
            break;
        case "Sugar":
            sugarQty = qty;
            break;
        case "Chocolate":
            chocolateQty = qty;
            break;
    }
}

// 处理最终库存添加的Then步骤
@Then("^Inventory is successfully added\\.$")
public void inventory_is_successfully_added() throws InventoryException {
    coffeeMaker.addInventory(coffeeQty, milkQty, sugarQty, chocolateQty);
    System.out.println("Inventory is successfully added.");
}

你原来的Feature文件不需要做任何修改,直接运行即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:57:02