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

Java 如何从jacoco代码覆盖范围中排除一行?,java,jacoco,jacoco-maven-plugin,Java,Jacoco,Jacoco Maven Plugin,如何将inputStream.close()从jacoco代码覆盖范围中排除在pom.xml或java代码中 public void run() { InputStream inputStream = null; try { inputStream = fileSystem.newFileInputStream(file); } finally { if(inputStream != null) { try

如何将
inputStream.close()
从jacoco代码覆盖范围中排除在pom.xml或java代码中

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

我不认为有一种方法可以排除特定的陈述。然而,有一个排除方法的规定,
,尽管它不推荐使用
。作为一个糟糕的解决方法,我们可以在语句外创建方法。 JaCoCo的0.8.2版本中添加了新功能,它过滤掉了使用
@Generated
注释的方法。有关详细信息,请参阅以下文档:

在生成报告期间,使用生成简单名称的运行时可见和不可见注释进行注释的类和方法将被过滤掉


有关更多信息,请参阅。

我怀疑您真正的目标是100%的覆盖率。考虑使用“资源块”的尝试来重新编写代码。例如:

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

你不能。如果您想从覆盖范围中排除某些将类覆盖范围降低到某个强制限制以下的行,则只需排除整个类或包。您可以在此处找到更多信息:

目前,无法排除特定行(请参阅):

到目前为止,JaCoCo core只在类文件上工作,没有源处理。这将需要对体系结构进行重大修改,并增加额外的配置麻烦

这意味着,Jacoco分析的是程序的字节码,而不是源代码,结果是它

跟踪以跟踪此类功能实现的状态


作为一种变通方法,您可以将其放入一个单独的方法中,但是请看,当您更改代码以达到100%的覆盖率时,这是一种难闻的气味

您使用的是什么版本的Java?“尝试使用资源”可能是一个选项。@AlehMaksimovich Java 8,您所说的资源是什么意思?此功能:不幸的是,它创建的代码覆盖率较低:(@AlehMaksimovichI知道这已经有一段时间了,但这是在谷歌搜索时弹出的第一个问题,它仍然没有答案……你找到答案了吗?在使用try-with-resources时,你甚至不需要一个
catch
块。正确。我只是想巧妙地暗示问题中的空catch块不是这是一种良好的做法,任何例外情况都应妥善处理。问题标题、问题正文以及悬赏信息中的额外澄清问题,这三个问题都在问“我如何排除JaCoCo中的一行?”。他们没有问任何关于
try catch
或其他的问题,这只是一个例子。@Andreytukin最初的问题正文具体地问了如何“排除
inputStream.close()
”,这使这个问题成为一个X-Y问题,通过这个答案解决了。@daniu我想OP提到的
inputStream.close()
只是因为SO上的代码段中没有显示行号,否则会出现类似“如何排除第8行”的情况,但好的。这个答案可能会对其他人有所帮助,这并不完全是我提供赏金时所要寻找的。不过,可能更接近。好吧,我知道最接近的答案是什么,因为它被关闭为重复,我希望在那里看到相关的更新。注释包含“生成”就足够了,请参阅。