Java io.cucumber.core.exception.CucumberException:无法转换参数…似乎您没有注册数据表类型
功能文件: 功能:Cucumber可以将小黄瓜表转换为地图。Java io.cucumber.core.exception.CucumberException:无法转换参数…似乎您没有注册数据表类型,java,intellij-idea,cucumber,Java,Intellij Idea,Cucumber,功能文件: 功能:Cucumber可以将小黄瓜表转换为地图。 场景:国际咖啡店必须处理货币 给一家国际咖啡店的价目表 | product | currency | price | | coffee | EUR | 1 | | donut | SEK | 18 | 当我买一杯咖啡和一个甜甜圈时 那么我应该付1欧元18瑞典克朗吗 代码中有一部分: @Given("^the price list for an international coffe
场景:国际咖啡店必须处理货币
给一家国际咖啡店的价目表
| product | currency | price |
| coffee | EUR | 1 |
| donut | SEK | 18 |
当我买一杯咖啡和一个甜甜圈时那么我应该付1欧元18瑞典克朗吗 代码中有一部分:
@Given("^the price list for an international coffee shop$")
public void the_price_list_for_an_international_coffee_shop(List<Price> prices) throws Throwable {
priceList = new HashMap<String, Price>();
for (Price price : prices) {
String key = price.getProduct();
priceList.put(key, price);
}
}
@给定(“^A国际咖啡店的价格表$”)
公共作废国际咖啡店的价目表(价目表)可丢弃{
priceList=newhashmap();
用于(价格:价格){
String key=price.getProduct();
价格表。放置(键、价格);
}
}
io.cucumber.core.exception.CucumberException:无法转换参数
步骤[^国际咖啡店$]的价目表定义如下:
'helloccumber.StepDefs_PriceList.国际咖啡店(java.util.list)的_price_列表'。
您似乎没有注册数据表类型。详情载于
在下面跟踪
<cucumber.version>5.4.1</cucumber.version>
<junit.version>4.13</junit.version>
5.4.1
4.13
我是黄瓜系的大三学生。您能解释一下代码中到底需要更改什么吗?看起来这个错误是因为新的cucumber版本5造成的,但是如何使它工作还不清楚。
谢谢。我假设您正在从v1.x升级到v5.x 在v1.x中,Cucumber将自动将数据表转换为POJO。这是由XStream内部处理的。不幸的是,这导致Cucumber和XStream之间的紧密耦合 相反,如果要将数据表转换为POJO,现在必须提供自己的对象映射器。您可以为所有转换注册一个,如下所示:
import com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.datatype.jsr310.jsr310模块;
导入io.cumber.java.DefaultDataTableCellTransformer;
导入io.cucumber.java.DefaultDataTableEntryTransformer;
导入io.cumber.java.DefaultParameterTransformer;
导入java.lang.reflect.Type;
公共类定义{
私有最终对象映射器对象映射器=
新的ObjectMapper().registerModule(新的JSR310Module());
@默认参数转换器
@DefaultDataTableEntryTransformer
@DefaultDataTableCellTransformer
公共对象defaultTransformer(对象从值、类型到值类型){
JavaType JavaType=objectMapper.constructType(toValueType);
返回objectMapper.convertValue(fromValue,javaType);
}
}
注意:本例中使用的是jackson数据绑定。它的工作方式与Cucumbers与XStream的集成方式并不完全相同,但它应该足以满足大多数用例
还可以针对特定java类型进行数据表转换:
Given some authors
| name | first publication |
| Aspiring Author | |
| Ancient Author | [blank] |
package com.example.app;
导入io.cumber.java.DataTableType;
导入io.cumber.java.en.Given;
导入java.util.List;
公共类定义{
@DataTableType(replaceWithEmptyString=“[blank]”)
公共作者转换(地图条目){
返回新作者(
entry.get(“name”),
entry.get(“第一次发布”)
);
}
@给定(“某些作者”)
某些作者(列出作者)的公共无效{
//作者=[作者(name=“有抱负的作者”,firstPublication=null),
//作者(姓名=“古代作者”,首次出版=)]
}
}