java中dable怎么比较大小,黄瓜DataTable执行差异的Java对象列表

全面披露:我为Cucumber编写了数据表模块.

手动将对象映射到数据表以及将对象映射到数据表非常耗时,无聊且容易出错.这最好留给对象映射器.另外,用于比较表与List< Map< String,String>>的实现.包含魔法,喷火器和陷阱.因此,我认为最好将其省略.

解决方案1

然后将以下配置放在粘合路径上的某个位置.对象映射器来自Jackson.它通常随Spring一起提供.

public class ParameterTypes implements TypeRegistryConfigurer {

@Override

public Locale locale() {

return ENGLISH;

}

@Override

public void configureTypeRegistry(TypeRegistry typeRegistry) {

Transformer transformer = new Transformer();

typeRegistry.setDefaultDataTableCellTransformer(transformer);

typeRegistry.setDefaultDataTableEntryTransformer(transformer);

typeRegistry.setDefaultParameterTransformer(transformer);

}

private class Transformer implements ParameterByTypeTransformer, TableEntryByTypeTransformer, TableCellByTypeTransformer {

ObjectMapper objectMapper = new ObjectMapper();

@Override

public Object transform(String s, Type type) {

return objectMapper.convertValue(s, objectMapper.constructType(type));

}

@Override

public T transform(Map map, Class aClass, TableCellByTypeTransformer tableCellByTypeTransformer) {

return objectMapper.convertValue(map, aClass);

}

@Override

public T transform(String s, Class aClass) {

return objectMapper.convertValue(s, aClass);

}

}

}

然后将@Getter和@Setter替换为@Data,以便实现哈希码,equals和toString.

@Data

public class Employee {

private Integer id;

private String name;

private String department;

}

然后修改您的步骤以使用雇员列表而不是数据表.上一步中安装的对象映射器将处理从数据表到对象的转换.

@Then("^following list of employees are returned$")

public void following_list_of_employees_are_returned(List expectedEmployees) throws Throwable {

List> actualEmployees = new ArrayList<>();

List employees = response.as(Employee[].class);

assertEquals(expectedEmployees, actualEmployees);

}

为了使比较顺序不敏感,请考虑使用AssertJs assertThat而不是JUnits assertEquals-它通常随Spring一起提供

解决方案2

将datatable-matchers添加到您的依赖项

io.cucumber

datatable-matchers

创建您自己的数据表并使用DataTableHasTheSameRowsAs匹配器对其进行比较.

@Then("^following list of employees are returned$")

public void following_list_of_employees_are_returned(DataTable expectedEmployees) {

List employees = response.as(Employee[].class);

DataTable actualEmployees = createTable(

employees,

asList("id", "name", "department"),

Employee::getId, Employee::getName, Employee::getDepartment

);

assertThat(actualEmployees, hasTheSameRowsAs(expectedEmployees));

}

static DataTable createTable(List values, List headers, Function... extractors) {

List> rawTable = new ArrayList<>();

rawTable.add(headers);

values.stream()

.map(employee -> Stream.of(extractors)

.map(f -> f.apply(employee))

.map(String::valueOf)

.collect(Collectors.toList()))

.forEach(rawTable::add);

return create(rawTable);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值