【发布时间】:2020-06-22 14:18:55
【问题描述】:
我有方法通过使用员工 ID、姓名和年龄等多个键来获取唯一元素。写了一个测试用例,但是过滤部分没有覆盖,那么如何覆盖呢?
List<Employee> employees = getEmployees().stream()
.filter(distinctByKey(Employee::getEmployeeId, Employee::getEmployeeName, Employee::getEmployeeAge))
.collect(Collectors.toList());
private <T> Predicate<T> distinctByKeys(Function<? super T, ?>... keyExtractors) {
final Map<List<?>, Boolean> seen = new ConcurrentHashMap<>();
return t -> {
final List<?> keys = Arrays.stream(keyExtractors)
.map(ke -> ke.apply(t))
.collect(Collectors.toList());
return seen.putIfAbsent(keys, Boolean.TRUE) == null;
};
}
【问题讨论】:
-
如果是关于代码覆盖率,你能不能也分享一下测试用例?这应该可以解释。
-
实际上它是一个私有方法,所以我为公共方法编写了一个测试用例,它将调用它,在那里我发送员工列表作为输入。
标签: java spring-boot junit java-8 mockito