我正在研究Cucumber,以便在春季启动项目中为Java程序编写BDD测试。
将该表想象为用户给定数据的示例:
Given user wants to buy a T-shirt with the following attributes
| color | size |
| blue | small |
| black | large |
问题出在映射数据上,我在调用一个API,该API以json格式获取数据,并且知道colour
而不是color
并以S
和L
的形式获取{ {1}}属性不是size
和small
。
有什么方法可以自动转换表中的数据,包括具有更多列和行的表的值或标题吗?
答案 0 :(得分:0)
在这里,我将分享我的工作方式:
首先创建一个用于映射数据的POJO:
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class TshirtInfo {
private String colour;
private String size;
@Override
public String toString() {
return "TshirtInfo [colour: " + colour + ", size: " + size + "]";
}
}
然后创建一个DataTransformer类以将数据映射到POJO:
public class DataTransformer implements TypeRegistryConfigurer {
public DataTransformer () {
this.map = new HashMap<>();
this.map.put("small", "S");
this.map.put("large", "L");
}
private Map<String, String> map;
@Override
public Locale locale() {
return Locale.ENGLISH;
}
@Override
public void configureTypeRegistry(TypeRegistry typeRegistry) {
typeRegistry.defineDataTableType(new DataTableType(TshirtInfo.class,
(Map<String, String> row) -> {
String colour = row.get("color");
String size = this.map.get(row.get("size"));
return new LoginInfo(colour, size);
}
)
);
}
}
最后使用它们:
public class Stepdefs implements En {
public Stepdefs () {
Given("user wants to buy a T-shirt with the following attributes", (DataTable dataTable) -> {
System.out.println(dataTable);
List<TshirtInfo> infos = dataTable.asList(TshirtInfo.class);
System.out.println(infos);
.
.
.
.
// other parts of your code
}
输出如下:
| color | size |
| blue | small |
| black | large |
[TshirtInfo [colour: blue, size: S], TshirtInfo [colour: black, size: L]]
仅此而已。