Java 如何添加注释以从jacoco代码覆盖率报告中排除方法?

Java 如何添加注释以从jacoco代码覆盖率报告中排除方法?,java,gradle,junit,code-coverage,jacoco,Java,Gradle,Junit,Code Coverage,Jacoco,我有一些Java代码要从代码覆盖范围中排除。我该怎么做?我希望能够添加注释。有没有办法配置或扩展jacoco(在gradle中使用)来使用它 例如: public class Something { @ExcludeFromCodeCoverage public void someMethod() {} } 我有一些Java代码要从代码覆盖范围中排除。我该怎么做?我希望能够添加注释。有没有办法配置或扩展jacoco(在gradle中使用)来使用它 到今天为止,最新发布的JaCo

我有一些Java代码要从代码覆盖范围中排除。我该怎么做?我希望能够添加注释。有没有办法配置或扩展jacoco(在gradle中使用)来使用它

例如:

public class Something
{
    @ExcludeFromCodeCoverage
    public void someMethod() {}
}
我有一些Java代码要从代码覆盖范围中排除。我该怎么做?我希望能够添加注释。有没有办法配置或扩展jacoco(在gradle中使用)来使用它

到今天为止,最新发布的JaCoCo版本(
0.7.9
)中还没有这类功能。只能排除整个类

在第页(专门针对开发人员),这是作为未来版本的想法记录的

JaCoCo官方文档包含有关如何获取最新未发布版本的信息,以及下一版本的未发布更改列表,其中包括各种过滤器,其中,Lombok和Groovy生成的方法的过滤分别由注释
Lombok.generated
Groovy.transform.generated
标记。您可能会滥用此功能,但出于各种原因,我不建议您这样做。

Tl;dr

使用注释
@lombok.Generated

解释


Jacoco集成了。默认情况下,Lombok生成的代码不在Jacoco覆盖范围内(请参阅)。您可以在您的方法中误用
lombok.Generated
,因为它被从覆盖率报告中排除。

JaCoCo的0.8.2版本中添加了新功能,它过滤掉了用@Generated注释的类和方法。有关详细信息,请参阅以下文档:

在生成报告的过程中,使用注释进行注释的类和方法(其保留策略为runtime或class,并且生成了简单名称)将被过滤掉(GitHub#731)


您可以在项目根目录中将
lombok.addlombokggeneratedannotation=true
设置为
lombok.config
。之后,Jacoco将忽略所有Lombok生成的代码


请参阅Lombok项目文档中的更多内容:

因为没有直接的答案,所以进行了一些研究,并发现了此PR

您可以创建名称包含“Generated”的任何注释。我在代码库中创建了以下内容,以将方法排除在Jacoco报告中

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExcludeFromJacocoGeneratedReport {}
在您的方法中使用此注释可以使其免于覆盖,如下所示

public class Something
{
    @ExcludeFromJacocoGeneratedReport
    public void someMethod() {}
}

+1,但是。。。这种注释的合法用途是什么?我在任何地方都找不到这样的例子,我的感觉是覆盖工具中的这个特性只会被误用和滥用。如果一个方法存在于源代码中并且不是空的,那么我认为应该在覆盖率分析中考虑它,即使源代码是由某个工具生成的。毕竟,该方法应该会对应用程序/系统功能做出一些贡献,对吗?如果是这样,为什么不测试它呢?@Rogério-静态助手类中的私有构造函数-我不认为使用反射强制构造函数执行是正确的方法…@CptBartender当然通过反射调用私有构造函数不是解决方案。。。正确的解决方案是让代码覆盖工具自动过滤掉它们;JaCoCo已经在为一个私有空构造函数进行此操作。@Rogério我不想介绍用于Q&d测试的main()方法或如何使用该类的示例。最新版本的JaCoCo支持这个特性吗?Lombok使用的是没有文档记录的、非官方的类,这些类并不能保证在每个java运行时都存在。(强烈建议不要使用)需要注意的是,这是一种黑客解决方法。强烈建议避免。如何“延伸”
@Generated
注释可以将其重命名为类似OP的建议:
@ExcludeFromCodeCoverage
?我很确定您必须为此修补JaCoCo。这包括您在自己的应用程序中定义的注释,称为
Generated
。Lombok使用未记录的,非官方类,不保证在每个java运行时中都存在。(强烈建议不要使用)@DonRhummy我不知道我是否正确理解您的评论,Lombok是一个编译时依赖项/插件,应用程序将附带编译代码,其中不应包含任何与Lombok相关的内容。如果我遗漏了什么,请告诉我。你试过并确认它有效吗?是的@DonRhummy。我可以看到在Sonarcloud分析中跳过了带此注释的方法这是必需的特定sonar扫描仪吗?我可以看到它对我不起作用,但功能在报告中显示为uncover也许你应该更新Jacoco插件版本它对我不起作用:(
public class Something
{
    @ExcludeFromJacocoGeneratedReport
    public void someMethod() {}
}