2016-08-11 1 views
0

Я использую NetBeans и JaCoCo, сконфигурированный таким образом, в моем проекте Maven POM:NetBeans, Jacoco и Optional.orElseThrow()

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

Для этого кода:

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

И только этот тест :

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

... тогда отчет о покрытии кода NetBeans показывает покрытие 100%. Это неверно, так как я не использовал случай, когда maybeName == Optional.empty() и исключение выбрано.

Использование EclEmma в Eclipse, я вижу частичное покрытие, как и ожидалось.

Есть ли какая-то дополнительная конфигурация, которую мне нужно дать JaCoCo?

ответ

1

JaCoCo только узнает о инструкциях и филиалах в ваших классах, и у него нет понимания инструкций и филиалов в библиотеках. Все инструкции в вашем классе были выполнены, включая инструкции в выражении лямбда, и ваш код не имеет каких-либо ветвей его собственных, только неявных ветвей в методе Optional.orElseThrow.

Если эта функция вас заинтересовала, я предложил вам задать вопрос о том, интересует ли проект эту функцию перед вами open a feature request issue. Возможно, можно было бы добавить конфигурацию, чтобы указать набор классов/методов, которые должны генерировать синтетическую ветвь.

 Смежные вопросы

  • Нет связанных вопросов^_^