如何从jacoco代码覆盖范围中排除一行?

时间:2017-10-24 17:47:54

标签: java jacoco jacoco-maven-plugin

如何从jacoco代码覆盖率,pom.xml或java代码中排除inputStream.close()

public void run() {
    InputStream inputStream = null;
    try {
        inputStream = fileSystem.newFileInputStream(file);
    }
    finally {
        if(inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {}
        }
    }
}

4 个答案:

答案 0 :(得分:4)

我怀疑您的真正目标是100%覆盖率。考虑改用try-with-resources块重写代码。例如:

try (final InputStream inputStream = new FileInputStream(file)){
    //work with inputStream; auto-closes
}
catch (final Exception ex){
    //handle it appropriately
}

答案 1 :(得分:4)

就目前而言,尚不能排除特定行(请参见the link):

  

到目前为止,JaCoCo Core仅适用于类文件,没有源处理。这将需要对体系结构进行重大修改,并增加其他配置麻烦。

这意味着,Jacoco将分析程序的字节代码,而不是源代码,cannot use hints like comments将其分析。

跟随the corresponding issue跟踪此类功能实现的状态。

作为一种解决方法,您可以将其放入单独的方法中,但是请注意,当您更改代码以使其达到100%覆盖级别时,这是一种难闻的气味。

答案 2 :(得分:0)

我认为没有办法排除特定的陈述。但是,有一项规定排除了方法though its not recommended。作为一种不好的解决方法,我们可以在语句外创建方法。 JaCoCo的0.8.2版本中已添加了新功能,该功能过滤了用@Generated注释的方法。有关详细信息,请参见下面的文档:

  

在生成报告的过程中会滤除带有运行时可见和不可见注释(其简单名称为Generated)的类和方法

有关更多信息,请参考https://github.com/jacoco/jacoco/wiki/FilteringOptions#annotation-based-filtering

答案 3 :(得分:0)

你不能。如果要从覆盖范围中排除某些行,从而使类覆盖率降至某个强制性限制以下,则只需排除整个类或程序包即可。您可以在这里找到更多信息:Maven Jacoco Configuration - Exclude classes/packages from report not working