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个物料的数值都传入该方法。
解决方法
推荐使用成员变量暂存各物料数值,最后统一执行添加操作,修改方式如下:
- 首先在测试类中新增4个成员变量存储各物料的配置数值:
// 测试类成员变量 private String coffeeQty; private String milkQty; private String sugarQty; private String chocolateQty;
- 拆分步骤定义,将物料赋值和库存添加的逻辑分开:
// 处理单物料赋值的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
相关产品推荐
相关产品推荐

