【问题标题】:Unable to resolve datatable after migrated from Cucumber 1 to Cucumber 4从 Cucumber 1 迁移到 Cucumber 4 后无法解析数据表
【发布时间】:2019-11-26 04:04:41
【问题描述】:

我有两节课

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

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

在不使用类型转换器的情况下,我仍然可以使用具有自动分辨率的黄瓜 4 吗?

【问题讨论】:

    标签: java cucumber


    【解决方案1】:

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

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

    Cucumber 1.x 和 2.x 使用了一个名为 XStream 的库作为中心 数据表转换的构建块。然而使用 XStream 与 Cucumber 结合使用的文档很少,但确实如此 不允许使用其他对象映射器(例如杰克逊) 使重用域对象成为不可能。由于 XStream 不是 与 Java 9 兼容,长期来看也是个问题。

    --

    在不使用类型转换器的情况下,我仍然可以使用具有自动分辨率的黄瓜 4 吗?

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

    见:https://cucumber.io/blog/announcing-cucumber-jvm-4-0-0/

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

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 2019-01-26
      • 1970-01-01
      • 2019-12-26
      • 2023-03-03
      相关资源
      最近更新 更多