Cucumber-JVM 3-io.cucumber.datatable.UndefinedDataTableTypeException [英] Cucumber-JVM 3 - io.cucumber.datatable.UndefinedDataTableTypeException

查看:223
本文介绍了Cucumber-JVM 3-io.cucumber.datatable.UndefinedDataTableTypeException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 pom.xml 中将Cucumber-JVM 2.4.0更新为3.0.2,DataTables开始引发此异常:

I updated from Cucumber-JVM 2.4.0 to 3.0.2 in my pom.xml and DataTables started throwing this exception:


io.cucumber.datatable.UndefinedDataTableTypeException:无法将
DataTable转换为List< jcucumberng.steps.pojos。收入>。请为
类jcucumberng.steps.pojos.Income

io.cucumber.datatable.UndefinedDataTableTypeException: Can't convert DataTable to List< jcucumberng.steps.pojos.Income >. Please register a DataTableType with a TableEntryTransformer or TableRowTransformer for class jcucumberng.steps.pojos.Income

I
类注册一个TableEntryTransformer或TableRowTransformer的
DataTableType将我所有的导入更改为

I changed all my imports to

import io.cucumber.datatable.DataTable;

我做了 mvn全新安装并进行了编译已成功,但是涉及DataTables的步骤在更新后不再起作用。

I did an mvn clean install and compilation was successful but steps involving DataTables no longer work after the update.

当前代码:

// 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中使用数据表的新方法?

Is there a new way to use the DataTables in Cucumber-JVM v3.x.x?

更新:

推荐答案

已完全进行了改进。 XStream已被删除,因此以前的代码将不起作用。

It has been totally revamped. XStream has been removed , so earlier code will not work.

您将需要为数据表和参数转换添加逻辑。请参阅这些- https://github.com/cucumber/cucumber/tree/master/datatable https://github.com/cucumber/cucumber/tree/ master / cucumber-expressions

You will need to add logic for datatable and parameter conversion. Refer to these - https://github.com/cucumber/cucumber/tree/master/datatable and https://github.com/cucumber/cucumber/tree/master/cucumber-expressions . Place below class code inside a package defined in the glue option.

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;
            }

        }

已更新
进口。 ..并非全部都是必需的,请保留相关内容

UPDATED Imports... Not all are required, keep what is relevant

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;

这篇关于Cucumber-JVM 3-io.cucumber.datatable.UndefinedDataTableTypeException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆