我有一种方法,可以通过使用多个键来获取唯一的元素,比如员工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;
};
}发布于 2020-11-29 22:38:33
如果确实需要这部分代码,可以使用带有注释@VisibleForTesting的lib Guava,并且可以在测试中调用此方法。
https://guava.dev/releases/19.0/api/docs/com/google/common/annotations/VisibleForTesting.html
https://stackoverflow.com/questions/62516552
复制相似问题