2016-02-24 82 views
7

我刚开始使用Java 8.我看到很多流和选项。我的脑海里浮现出一个问题。考虑从this oracle tutorial采取了以下例子:Java 8中的覆盖率报告

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); 

有没有覆盖解决方案,它可以告诉我,如果在第一个片段的orElse使用?或者其他的,它告诉我,关闭没有被调用,因为列表是空的?是否有任何报告,forEach中的方法参考未使用?

+0

为您的测试数据使用未添加可选的,没有任何价值,并检查未知的出现。 – JEY

+1

'orElse'调用总是会发生,并且在调用发生之前它的参数总是被评估,所以它的覆盖不需要评估。在lambda表达式的情况下,它们在编译期间被解析为合成方法,所以每个最新的代码覆盖率也应该能够处理它们。 – Holger

+3

当您在您的流上使用“终端”操作时,您可以保证“流水线”中的任何操作都会被点击。所以并不需要覆盖。 – fge

回答

1

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

例中的IntelliJ:

enter image description here