Я предполагаю, что вы переходите с v1.x на v5.x.
В v1.x Cucumber автоматически конвертирует таблицы данных в POJO. Это было обработано внутри XStream. К сожалению, это привело к тесной связи между Cucumber и XStream.
Вместо этого, если вы хотите преобразовать таблицы данных в POJO, теперь вы должны предоставить свой собственный объектный преобразователь. Вы можете зарегистрировать одно для всех преобразований следующим образом:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JSR310Module;
import io.cucumber.java.DefaultDataTableCellTransformer;
import io.cucumber.java.DefaultDataTableEntryTransformer;
import io.cucumber.java.DefaultParameterTransformer;
import java.lang.reflect.Type;
public class StepDefinitions {
private final ObjectMapper objectMapper =
new ObjectMapper().registerModule(new JSR310Module());
@DefaultParameterTransformer
@DefaultDataTableEntryTransformer
@DefaultDataTableCellTransformer
public Object defaultTransformer(Object fromValue, Type toValueType) {
JavaType javaType = objectMapper.constructType(toValueType);
return objectMapper.convertValue(fromValue, javaType);
}
}
Примечание. В этом примере мы используем jackson-databind
. Это не работает точно так же, как интеграция Cucumbers с XStream, но этого должно быть достаточно для большинства случаев использования.
Вы также можете преобразовать таблицу данных для указанного c java типа:
Given some authors
| name | first publication |
| Aspiring Author | |
| Ancient Author | [blank] |
package com.example.app;
import io.cucumber.java.DataTableType;
import io.cucumber.java.en.Given;
import java.util.List;
public class StepDefinitions {
@DataTableType(replaceWithEmptyString = "[blank]")
public Author convert(Map<String, String> entry){
return new Author(
entry.get("name"),
entry.get("first publication")
);
}
@Given("some authors")
public void given_some_authors(List<Author> authors){
// authors = [Author(name="Aspiring Author", firstPublication=null),
// Author(name="Ancient Author", firstPublication=)]
}
}