Миграция с v2.xx на v3.xx для DataTable
Публикация моего ответа в качестве справки для тех, кто может столкнуться с тем же.Чтобы объявить об их выпуске, нажмите здесь .
Я решил поместить DataTableConfigurer.java
в отдельную упаковку, чтобы она не смешивалась с моими отчётами:
Исполнитель:
@CucumberOptions(features = { "src/test/resources/features" }, tags = { "not @ignore" }, glue = {
"jcucumberng/steps/defs", "jcucumberng/steps/config", "jcucumberng/steps/hooks" }, ...
DataTableConfigurer:
import java.util.Locale;
import java.util.Map;
import cucumber.api.TypeRegistry;
import cucumber.api.TypeRegistryConfigurer;
import io.cucumber.datatable.DataTableType;
import io.cucumber.datatable.TableEntryTransformer;
import jcucumberng.steps.domain.Expense;
import jcucumberng.steps.domain.Income;
/*
* Maps datatables in feature files to custom domain objects.
*/
public class DataTableConfigurer implements TypeRegistryConfigurer {
@Override
public Locale locale() {
return Locale.ENGLISH;
}
@Override
public void configureTypeRegistry(TypeRegistry registry) {
registry.defineDataTableType(new DataTableType(Income.class, new TableEntryTransformer<Income>() {
@Override
public Income transform(Map<String, String> entry) {
return new Income(entry.get("name"), entry.get("amount"), entry.get("frequency"));
}
}));
registry.defineDataTableType(new DataTableType(Expense.class, new TableEntryTransformer<Expense>() {
@Override
public Expense transform(Map<String, String> entry) {
return new Expense(entry.get("name"), entry.get("amount"), entry.get("frequency"));
}
}));
}
}
У меня был другой пользовательский тип домена Expense
(который, как оказалось, имел те же поля), поэтому я только что зарегистрировалсяэто снова на основе примера.