2016-02-24 81 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