如何通过黄瓜4.0中的类型注册表添加数据表

问题描述 投票:0回答:1

对于我使用的黄瓜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|
cucumber cucumber-java
1个回答
0
投票

有几种方法可以做到。对于#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)));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.