有没有一种方法可以传递枚举列表以进入黄瓜4.x和Java

时间:2020-03-19 15:55:00

标签: cucumber cucumber-jvm cucumber-java

假设我有示例枚举类

public enum Name { FIRST_NAME, LAST_NAME;}

我有一个这样的步骤

 Then followed name types are listed:
      | FIRST_NAME |
      | LAST_NAME  |

我要像这样传递列表

  @Then("^followed name types are listed:$")
  public void followedNameTypesAreListed(List<Name> nameTypes){...}

我目前正在迁移到黄瓜4.x,我发现我可以像这样注册自定义DataTableType

typreRegistry.defineDataTableType(new DataTableType(Name.class,
        (TableCellTransformer<Name>) Name::valueOf)

但是对每个单个枚举类执行此操作听起来效率不高,是否没有其他方法可以处理任何枚举类的列表?

1 个答案:

答案 0 :(得分:1)

一种快速的方法是将对象映射器作为默认的单元转换器。然后,对象映射器将用于所有将单元格映射到单个对象并且尚未定义现有数据表类型的情况。

您可以为此使用jackson-databind

在黄瓜v4中:

package com.example.app;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.cucumber.core.api.TypeRegistry;
import io.cucumber.core.api.TypeRegistryConfigurer;

import java.util.Locale;

public class ParameterTypes implements TypeRegistryConfigurer {

    private final ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public Locale locale() {
        return Locale.ENGLISH;
    }

    @Override
    public void configureTypeRegistry(TypeRegistry typeRegistry) {
        typeRegistry.setDefaultDataTableCellTransformer(objectMapper::convertValue);
    }
}

在v5中:

package com.example.app;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.cucumber.java.DefaultDataTableCellTransformer;

import java.lang.reflect.Type;

public class DataTableSteps {

   private final ObjectMapper objectMapper = new ObjectMapper();

   @DefaultDataTableCellTransformer
   public Object defaultTransformer(Object fromValue, Type toValueType) {
       return objectMapper.convertValue(fromValue, objectMapper.constructType(toValueType));
   }
}