Cucumber 6.9 java8, невозможно преобразовать из DataTable в пользовательский тип

Я хочу зарегистрировать свой пользовательский тип, чтобы автоматически получать список из datatable.

Несмотря на то, что есть много источников, ссылающихся на класс TypeRegistryConfigurer, он, похоже, устарел в последней версии ядра огурца.

Я пытался посмотреть этот источник поэтому я сделал это:

public class BurpStepDefs implements En {

    private static ObjectMapper objectMapper = new ObjectMapper();

    private static final DataTableType ENTRY =
            new DataTableType(CartInput.Article.class, (java.util.Map<String, String> entry) ->
                    objectMapper.convertValue(entry, CartInput.Article.class));

    private final DataTableTypeRegistry registry = new DataTableTypeRegistry(Locale.ENGLISH);

        public BurpStepDefs() {

        registry.defineDataTableType(ENTRY);

        Given("burped", () -> {

        });

        When("burping", (DataTable o) -> {
            o.asList(CartInput.Article.class); // goes wrong
        });

        Then("burp", (DataTable o) -> {

        });

    }
}

Это файл функций

Feature: operate with customer cart
  Verify all cart operations

  Scenario: scenario burp
    Given burped
    When burping
      | BIRP        | 1 |
      | BYRP        | 1 |
    Then I burp
      | BIRP        | 1 |
      | BYRP        | 1 |

Я получаю следующую ошибку:

Can't convert DataTable to List<it.infocert.ecommerce.checkout.model.CartInput$Article>.
Please review these problems:

 - There was no table entry or table row transformer registered for it.infocert.ecommerce.checkout.model.CartInput$Article.
   Please consider registering a table entry or row transformer.

 - There was no default table entry transformer registered to transform it.infocert.ecommerce.checkout.model.CartInput$Article.
   Please consider registering a default table entry transformer.

Note: Usually solving one is enough

Любой намек?

РЕДАКТИРОВАТЬ

После прочтения @M.P. Korstanje и характеристики огурца (сначала я думал, что документы устарели) Я решил это:

DataTableType((java.util.List<String> entry) -> {

    final var output = new CartInput.Article();
    output.setName(entry.get(0));
    output.setQuantity(Integer.parseInt(entry.get(1)));
    output.setOperationId("A");
    return output;
});
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
3 998
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете биты и бобы из внутреннего API Cucumbers. Однако весь лямбда-DSL Cucumbers содержится в интерфейсе En (и его родительском интерфейсе LambdaGlue). Таким образом, чтобы определить один трансформатор записи таблицы данных, вы должны сделать:

public class BurpStepDefs implements En {

    private static ObjectMapper objectMapper = new ObjectMapper();

    public BurpStepDefs()
        DataTableType(
                (Map<String, String> entry) -> objectMapper.convertValue(entry, CartInput.Article.class));
    }
}

Если вы используете современную IDE, вы также можете ввести this. внутри конструктора и вызвать автозаполнение (ctrl+space), чтобы просмотреть доступные предложения.

Другие вопросы по теме

Есть ли способ получить список сценариев, которые должны быть запущены в аннотации @BeforeClass в JVM огурца
Огуречные тесты не запускаются
Не удается запустить отдельные сценарии Cucumber с помощью средства запуска тестов TestNG.
Получить список сценариев по заданным тегам огурца
Как сделать так, чтобы сборка jenkins проходила, если процент прохождения сценариев огурца составляет 80%
Огурец 5: получить имя шага из файла функций, исключая синтаксис корнишона (данные, когда, тогда и)
Как мы можем запускать только определенные кексы с Cucumber
Не удается разрешить JacksonTableTransformer для Cucumber 4.x.x
Уничтожение bean-компонента данного пакета и его повторное создание перед каждым сценарием огурца (тестом), чтобы предотвратить утечку состояния между сценариями.
Cucumber JVM: избегайте внедрения зависимостей Picocontainer для функций, не помеченных для выполнения