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