从黄瓜1迁移到黄瓜4后无法解析数据表

时间:2019-11-25 18:19:04

标签: java cucumber

我有两个课

class MyType {
   private MyInnerType myInnerType;
   private String name;
   private Integer number;
}

class MyInnerType {
   private String subTypeName;
   private String id;
}

这两个类别用于具有Step定义的黄瓜测试:

@Given("^the system has types$")
public void types(List<MyType> myTypeList) {
     ....
}

该子句用数据表定义:

| subTypeName    | id | name  | number |
| abc            | 1  | tom   | 1000   |
| def            | 2  | jerry | 2000   |
| ghi            | 3  | jack  | 3000   |

使用Cucumber 1可以很好地使用此定义。看起来类型转换和内部类型转换是自动完成的。

此代码移植到黄瓜4后,我开始出现如下错误:

Caused by: io.cucumber.datatable.CucumberDataTableException: 'java.util.List<com.mycompany.MyType>' could not transform

我做了一些Google搜索。显而易见的答案是为MyType和MyInnerType注册类型转换器。在我看来,这是一个非常有用的功能已被删除以用于较新的版本。

在不使用类型转换器的情况下,我还能使用自动分辨率的黄瓜4吗?

1 个答案:

答案 0 :(得分:2)

  

在我看来,这是一个非常有用的功能已为较新版本删除。

发件人:https://cucumber.io/blog/announcing-cucumber-jvm-3-0-0/

  

黄瓜1.x和2.x使用名为XStream的库作为中央库   数据表转换的构建块。但是的用法   XStream与Cucumber结合使用的文献不多,确实   不允许使用其他对象映射器(例如Jackson)   使得无法重用域对象。由于XStream不是   长期与Java 9兼容,这也是一个问题。

-

  

在不使用类型转换器的情况下,我还能使用自动分辨率的黄瓜4吗?

您可以选择一个对象映射器框架(Jackson,XStream,Gson等)并将其安装为默认数据表转换器。这将处理大多数用例。

请参阅:https://cucumber.io/blog/announcing-cucumber-jvm-4-0-0/

尽管我不相信有任何对象映射器框架可以将映射转换为嵌套结构。您必须在那里找到其他解决方案。

相关问题