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

Posted

技术标签:

【中文标题】Cucumber V5-V6 - 在特征文件步骤中传递复杂对象【英文标题】:Cucumber V5-V6 - passing complex object in feature file step 【发布时间】:2021-09-11 21:33:55 【问题描述】:

所以我最近迁移到 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 的实例(尽管至少存在一个创建者)

如何告诉 cucumber 将特定单元格解释为列表?但是让所有人都在同一个步骤中而不是分开?或者更好的是如何在包含不同变量类型(如 List、HashSet 等)的步骤中发送对象。

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

【问题讨论】:

您使用的对象映射器是 Jackson。杰克逊进行了实际的转变。不是黄瓜。所以如果你想办法和杰克逊一起做这件事,你可能会得到更好的结果。 另外放一个断点,看看fromValue是什么。它将帮助您了解您想要将什么转变为什么。 【参考方案1】:

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

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

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

【讨论】:

以上是关于Cucumber V5-V6 - 在特征文件步骤中传递复杂对象的主要内容,如果未能解决你的问题,请参考以下文章

Cucumber 6 未定义的自定义步骤

黄瓜特征文件不识别步骤

每次测试运行时编写带有唯一数据的 Cucumber 特征文件

执行多个黄瓜特征文件

我在Eclipse中使用Java建立了一个简单的自动化框架,但是无法通过Junit运行Cucumber测试

可以在Cucumber(java)中创建“Master Step”吗?