2016-02-24 9 views
7

私はJava 8で作業を開始しました。ストリームとオプションの多くがあります。 1つの質問が私の心に浮かび上がった。 this oracle tutorialから取った次の例を考えてみましょう:Java 8のカバレッジレポート

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

またはhereから取られた次の1:

List<String> myList = new ArrayList(); 

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

は、最初のスニペットでorElseを使用した場合は私に言うことができる任意のカバレッジ・ソリューションは、ありますか?または、リストが空だったので、filterクロージャがまったく呼び出されていないと私に伝えられます。 forEachのメソッドリファレンスが使用されていないという報告はありますか?

+0

テストのためのデータ利用が表示され、任意の値なしの未オプションを追加し、その未知のを確認してください。 – JEY

+1

'orElse'呼び出しは常に起こります。呼び出しが行われる前に引数が常に評価されるため、カバレッジの評価は必要ありません。ラムダ式の場合、コンパイル時に合成メソッドに変更されるので、最新のコード・カバレッジもそれに対応できるはずです。 – Holger

+3

ストリーム上で「ターミナル」操作を使用すると、「パイプライン」内のすべての操作がヒットすることが保証されます。だから本当にカバレッジの必要はありません。 – fge

答えて

1

少なくともクローバーはクロージャのカバレッジをサポートしているようです。ブログの項目thisを参照してください!

のIntelliJでの例:

enter image description here