java - Cucumber-JVM 3 - io.cucumber.datatable.UndefinedDataTableTypeException
问题描述
我在我的pom.xml
和 DataTables 中从 Cucumber-JVM 2.4.0 更新到 3.0.2 开始抛出这个异常:
io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 List<jcucumberng.steps.pojos.Income>。请使用 jcucumberng.steps.pojos.Income 类的 TableEntryTransformer 或 TableRowTransformer 注册 DataTableType
我将所有导入更改为
import io.cucumber.datatable.DataTable;
我做了一个mvn clean install
并且编译成功,但涉及 DataTables 的步骤在更新后不再起作用。
当前代码:
// Feature
When I Enter My Regular Income Sources
| name | amount | frequency |
| Salary | 25000 | every 2 weeks |
// Stepdef
@When("^I Enter My Regular Income Sources$")
public void I_Enter_My_Regular_Income_Sources(DataTable dataTable) throws Throwable {
List<Income> incomes = dataTable.asList(Income.class);
// More code
}
// Custom type
public class Income {
private String name = null;
private String amount = null;
private String frequency = null;
public Income(String name, String amount, String frequency) {
this.name = name;
this.amount = amount;
this.frequency = frequency;
}
// Getters and setters
}
在 Cucumber-JVM v3.xx 中是否有使用 DataTables 的新方法?
解决方案
它已被彻底改造。XStream 已被删除,因此早期的代码将无法工作。
您将需要为数据表和参数转换添加逻辑。请参阅这些 - https://github.com/cucumber/cucumber/tree/master/datatable和https://github.com/cucumber/cucumber/tree/master/cucumber-expressions。将下面的类代码放在胶水选项中定义的包内。
public class Configurer implements TypeRegistryConfigurer {
@Override
public void configureTypeRegistry(TypeRegistry registry) {
registry.defineDataTableType(new DataTableType(Income.class, new TableEntryTransformer<Income>() {
@Override
public Income transform(Map<String, String> entry) {
return new Income(entry.get("name"),entry.get("amount"),entry.get("frequency"));
}
}));
}
@Override
public Locale locale() {
return Locale.ENGLISH;
}
}
更新的进口......并非全部都是必需的,保留相关的
import cucumber.api.TypeRegistry;
import cucumber.api.TypeRegistryConfigurer;
import io.cucumber.cucumberexpressions.ParameterType;
import io.cucumber.datatable.DataTable;
import io.cucumber.datatable.DataTableType;
import io.cucumber.datatable.TableCellTransformer;
import io.cucumber.datatable.TableEntryTransformer;
import io.cucumber.datatable.TableRowTransformer;
import io.cucumber.datatable.TableTransformer;
推荐阅读
- neo4j - 为什么我的 apoc.refactor.cloneNodes 调用迭代并为图中的每个节点创建克隆?
- java - 尝试从 Java 中的命令行解析 JSON 时出错
- c - 为什么我不能在简单的 opendir 之后 malloc 内存
- cocoa - 菜单快捷方式覆盖 NSTextField 的正常行为
- c - 我想创建一个makefile而不在其中指定文件名
- css - 在 bootstrap 4 中使用多个响应式布局
- javascript - 比较一个数组中的多个值
- python - 处理 ElasticSearch 的最 Pythonic 方式是什么?
- solidity - 为什么这个智能合约功能在使用 web3 提供程序的 Remix IDE 上不起作用?
- c# - 设置whats-app api的步骤是什么