Cucumber V5-V6 - 在特征文件步骤中传递复杂对象
Cucumber V5-V6 - passing complex object in feature file step
所以我最近迁移到了 v6,我会尽量简化我的问题
我有以下class
@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)
如何让 Cucumber 将特定单元格解释为列表?但让所有人都在同一个步骤中不分裂?或者更好的方法是如何在包含不同变量类型(如 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));
}
}
它在某种程度上非常具体,但找不到更好的解决方案:)
所以我最近迁移到了 v6,我会尽量简化我的问题
我有以下class
@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)
如何让 Cucumber 将特定单元格解释为列表?但让所有人都在同一个步骤中不分裂?或者更好的方法是如何在包含不同变量类型(如 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));
}
}
它在某种程度上非常具体,但找不到更好的解决方案:)