【问题标题】:How to write a Mockito test for Java 8 Predicate and distinctByKeys in Java如何在 Java 中为 Java 8 Predicate 和 distinctByKeys 编写 Mockito 测试
【发布时间】: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


【解决方案1】:

如果真的需要这部分代码,你可以使用带有@VisibleForTesting注解的lib Guava,你可以在测试中调用这个方法。

https://guava.dev/releases/19.0/api/docs/com/google/common/annotations/VisibleForTesting.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多