【问题标题】:Coverage report in Java 8Java 8 中的覆盖率报告
【发布时间】:2016-02-24 09:56:29
【问题描述】:

我刚刚开始使用 Java 8。我看到了很多流和可选项。一个问题突然出现在我的脑海中。考虑以下取自this oracle tutorial 的示例:

String name = computer.flatMap(Computer::getSoundcard)
                          .flatMap(Soundcard::getUSB)
                          .map(USB::getVersion)
                          .orElse("UNKNOWN");

或者下一张取自here

List<String> myList = new ArrayList();

myList
    .stream()
    .filter(s -> s.startsWith("c"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

是否有任何覆盖解决方案,可以告诉我是否使用了第一个 sn-p 中的orElse?或者其他一些,它告诉我 filter 闭包根本没有被调用,因为列表是空的?任何人都可以报告forEach 中的方法引用没有被使用吗?

【问题讨论】:

  • 用于您的测试的数据添加 un optional 没有任何值,并检查未知出现。
  • orElse 调用将始终发生,并且它的参数始终在调用发生之前进行评估,因此它的覆盖范围不需要评估。在 lambda 表达式的情况下,它们在编译期间被分解为合成方法,因此每个最新的代码覆盖率也应该能够处理它们。
  • 当您在流上使用“终端”操作时,可以保证“管道”中的任何操作都会被命中。所以实际上不需要覆盖。
  • @fge: 如果列表为空,我很确定不会调用 String.startsWith。

标签: java unit-testing java-8 code-coverage


【解决方案1】:

至少 Clover 似乎支持对闭包的覆盖。请参阅this 博客条目!

Intellij 中的示例:

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多