2016-08-11 6 views
0

私は私のプロジェクトのMavenのPOMでこのように構成されたNetBeansとJaCoCoを使用します。のNetBeans、JacocoとOptional.orElseThrow()

public String showName(Optional<String> maybeName) { 
    return maybeName.orElseThrow(() -> new RuntimeException("Missing name")); 
} 

そしてだけ、このテスト:このコードの場合

<plugin> 
     <groupId>org.jacoco</groupId> 
     <artifactId>jacoco-maven-plugin</artifactId> 
     <version>0.7.7.201606060606</version> 
     <executions> 
      <execution> 
       <goals> 
        <goal>prepare-agent</goal> 
       </goals> 
      </execution> 
      <execution> 
       <id>report</id> 
       <phase>prepare-package</phase> 
       <goals> 
        <goal>report</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

@Test 
public void testShowName() { 
    String actual = foo.showName(Optional.of("John")); 
    assertEquals("John", actual); 
} 

... NetBeansコードカバレッジレポートは100%カバレッジを示します。 maybeName == Optional.empty()が例外をスローした場合を実行していないので、これは正しくありません。

EclipseでEclEmmaを使用すると、部分的なカバレッジが予想通りに表示されます。

JaCoCoに必要な設定がありますか?

答えて

1

JaCoCoは、クラス内の命令と分岐のみを認識し、ライブラリの命令と分岐を意識していません。ラムダ式の命令を含め、クラス内のすべての命令が実行され、コードには独自の分岐がなく、Optional.orElseThrowメソッドの暗黙的な分岐のみが使用されます。

この機能がご興味のある場合は、open a feature request issueの前にこの機能に興味があるかどうかをJaCoCo user groupでお尋ねします。おそらく、合成ブランチを生成するクラス/メソッドのセットを指定するための設定を追加することは可能でしょう。