对于我使用的黄瓜3.0
typeRegistry.defineDataTableType(DataTableType.entry(CustomData.class));
public class CustomData {
private int id;
private int val;
private Region region;
private Boolean isExisting;
private String type;
//getter and setter methods
}
如何在黄瓜4.0.0中将其转换为configureTypeRegistry的一部分
我在特征文件中的步骤为
When I set the custom data
| region | id | val | isExisting | type |
| NA | 2 | 10 | true | custom|
有几种方法可以做到。对于#2和#3,您必须在项目中添加对jackson-databind
的依赖。
import com.fasterxml.jackson.databind.ObjectMapper;
import io.cucumber.core.api.TypeRegistry;
import io.cucumber.core.api.TypeRegistryConfigurer;
import io.cucumber.datatable.DataTableType;
import java.util.Map;
class TypeRegistryConfiguration implements TypeRegistryConfigurer {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public void configureTypeRegistry(TypeRegistry typeRegistry) {
// 1. Define the mapping yourself.
typeRegistry.defineDataTableType(
new DataTableType(MyType.class,
(Map<String, String> entry) -> {
MyType object = new MyType();
object.setX(entry.get("X"));
return object;
}
)
);
// 2. Define a data table type that delegates to an object mapper
typeRegistry.defineDataTableType(
new DataTableType(MyType.class,
(Map<String, String> entry) -> objectMapper.convertValue(entry, MyType.class)
)
);
// 3. Define a default data table entry that takes care of all mappings
typeRegistry.setDefaultDataTableEntryTransformer(
(entryValue, toValueType, cellTransformer) ->
objectMapper.convertValue(entryValue, objectMapper.constructType(toValueType)));
}
}