首页 > 解决方案 > java测试中的“cucumber.runtime.CucumberException:Arity mismatch:Step Definition”是什么?

问题描述

我已经编写了一个代码来测试将项目添加到库存中,但我不断收到 Arity 不匹配错误。

我的代码如下:

@When("^(Coffee|Milk|Sugar|Chocolate) is (.*)$")
    @Then("^Inventory is successfully added\\.$")
    public void inventory_is_successfully_added(String Coffee, String milk, String sugar, String chocolate) throws InventoryException {
        
        coffeeMaker.addInventory(Coffee,milk,sugar,chocolate);
        System.out.println("Inventory is successfully added.");
    }

并且在功能文件中编写的相应场景是这样的:

Scenario: Add Inventory
        When Coffee is 4
        When Milk is 7 
        When Sugar is 0
        When Chocolate is 9
        Then Inventory is successfully added.

这是我得到的错误:

cucumber.runtime.CucumberException: Arity mismatch: Step Definition 'edu.ncsu.csc326.coffeemaker.TestSteps.inventory_is_successfully_added(String,String,String,String) in file:/D:/newEclipse/Assign/build/classes/java/test/' with pattern [^(Coffee|Milk|Sugar|Chocolate) is (.*)$] is declared with 4 parameters. However, the gherkin step has 2 arguments [Coffee, 4].

有人可以告诉我这是什么意思吗?TIA

标签: javacucumber-jvmcucumber-junitautomation-testing

解决方案


此异常意味着您的步骤中捕获组的数量与您的步骤定义中定义的参数数量不匹配。

在您的示例中,该步骤@When("^(Coffee|Milk|Sugar|Chocolate) is (.*)$")有 2 个捕获组:(Coffee|Milk|Sugar|Chocolate)并且(.*)该步骤@Then("^Inventory is successfully added\\.$")没有捕获组。步骤定义public void inventory_is_successfully_added(String Coffee, String milk, String sugar, String chocolate)定义了 4 个参数:String CoffeeString milkString sugarString chocolate

Cucumber 抛出此异常,因为它不知道将哪些值传递给参数。

要解决这个问题:

  1. (Coffee|Milk|Sugar|Chocolate)如果您还没有添加数量,请实施添加数量的步骤(您的示例未提供实施)。
  2. 实现inventory_is_successfully_added() 的步骤定义,以便该方法不接受任何参数,并在方法内部从您的测试上下文中获取为 、 等提供的coffeemilk

推荐阅读