我有两个课
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吗?
答案 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/
尽管我不相信有任何对象映射器框架可以将映射转换为嵌套结构。您必须在那里找到其他解决方案。