微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cucumber V5-V6 - 在特征文件步骤中传递复杂对象

如何解决Cucumber V5-V6 - 在特征文件步骤中传递复杂对象

所以我最近迁移到了 v6,我会尽量简化我的问题

我有以下课程

@AllArgsConstructor
public class Songs {
    String title;
    List<String> genres;
}

在我的场景中,我想要这样的东西:

Then The results are as follows:
|title      |genre         |
|happy song |romance,happy|

实现应该是这样的:

@Then("Then The results are as follows:")
public void theResultsAreAsFollows(Songs song) { 
//Some code here
}

我有认的变压器

@DefaultParameterTransformer
    @DefaultDataTableEntryTransformer(replaceWithEmptyString = "[blank]")
    @DefaultDataTableCellTransformer
    public Object transformer(Object fromValue,Type tovalueType) {
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.convertValue(fromValue,objectMapper.constructType(tovalueType));
}

我当前的问题是出现以下错误:无法构造 java.util.ArrayList 的实例(尽管至少存在一个 Creator)

如何告诉黄瓜将特定单元格解释为列表?但保持所有在同一步骤不会分开?或者更好的是,我如何在包含不同变量类型(例如 List、HashSet 等)的步骤中发送对象。

如果我进行更改并用字符串替换列表,一切都会按预期工作

解决方法

@M.P.Korstanje 谢谢你的想法。如果有人试图为此找到解决方案,我就是按照收到的建议这样做的。检查以查看 fromValue 的类型并将转换方法更新为类似:

if (fromValue instanceof LinkedHashMap) {
        Map<String,Object> map =  (LinkedHashMap<String,Object>) fromValue;
        Set<String> keys = map.keySet();

        for (String key : keys) {
          if (key.equals("genres")) {
              List<String> genres = Arrays.asList(map.get(key).toString().split(",",-1));
              map.put("genres",genres);
          }
            return objectMapper.convertValue(map,objectMapper.constructType(toValueType));
        }
    }

它在某种程度上非常具体,但找不到更好的解决方案:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?