java - 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
解决方案
此异常意味着您的步骤中捕获组的数量与您的步骤定义中定义的参数数量不匹配。
在您的示例中,该步骤@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 Coffee
、String milk
、String sugar
、String chocolate
。
Cucumber 抛出此异常,因为它不知道将哪些值传递给参数。
要解决这个问题:
(Coffee|Milk|Sugar|Chocolate)
如果您还没有添加数量,请实施添加数量的步骤(您的示例未提供实施)。- 实现inventory_is_successfully_added() 的步骤定义,以便该方法不接受任何参数,并在方法内部从您的测试上下文中获取为 、 等提供的
coffee
值milk
。
推荐阅读
- swift - 模态“下推”视图中的 SwiftUI navigationView
- javascript - 如何控制与浏览器后退按钮一起使用的网站页面访问
- reactjs - 从浏览器调用的 Nextjs 路径返回 404 (Nextjs, NGINX)
- kubernetes - 在 Kubernetes 中创建作业和 cronjob 的命令式命令
- r - 在 R 中使用循环创建新变量
- arrays - 如何将用户输入的字符串放入 MIPS 中的数组中
- node.js - nodejs api没有响应
- ios - Xcode 11.1 无法仅为设备构建模块“基础”
- ios - 如何实现导航栏超类的layoutSubviews
- image - 在图像文本文档中随机生成合成噪声