Есть ли способ передать список перечислений в step в огурце 4.x и java - PullRequest
1 голос
/ 19 марта 2020

допустим, у меня есть пример класса enum

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){...}

В настоящее время я перехожу на cucumber 4.x, и я понял, что могу зарегистрировать пользовательский тип DataTableType, например

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

, но делать это для каждого класса перечисления не очень эффективно, не так ли? Есть ли другой способ обработки списка для любого класса enum?

1 Ответ

1 голос
/ 19 марта 2020

Одним из быстрых способов сделать это было бы для нас отображение объекта в качестве преобразователя ячейки по умолчанию. Затем сопоставитель объектов будет использоваться во всех ситуациях, когда ячейка сопоставляется с одним объектом, а существующий тип таблицы данных не определен.

Для этого можно использовать jackson-databind.

В Cucumber 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));
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...