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

Don*_*mmy 15 java junit code-coverage gradle jacoco

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

例:

public class Something
{
    @ExcludeFromCodeCoverage
    public void someMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

小智 16

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

在生成报告(GitHub #731)期间过滤掉保留策略为运行时或类且简单名称为 Generated 的注释的类和方法。

JaCoCo 0.8.2 发行说明

  • 这包括您在自己的应用程序中定义的称为“生成”的注释。 (2认同)

小智 12

按照 @mohamed-anees-a 方法,我得到了这个 kotlin 版本:

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
annotation class ExcludeFromJacocoGeneratedReport
Run Code Online (Sandbox Code Playgroud)


Mar*_*lte 11

太;博士

使用Lombok@lombok.Generated的注释。

解释

Jacoco 与Lombok集成。默认情况下,Lombok 生成的代码不包括在 Jacoco 覆盖范围内(请参阅Jacoco 变更日志中的版本 0.8.0)。您可能会滥用lombok.Generated您的方法,因为它被排除在覆盖率报告之外。

  • Lombok 使用未记录的非官方类,不保证在每个 java 运行时中都存在。(并且强烈建议不要使用) (3认同)

Moh*_*s A 10

由于对此没有直接答案,因此做了一些研究并遇到了这个 PR。

https://github.com/jacoco/jacoco/pull/822/files

  private static boolean matches(final String annotation) {
    final String name = annotation
            .substring(Math.max(annotation.lastIndexOf('/'),
                    annotation.lastIndexOf('$')) + 1);
    return name.contains("Generated")
  }
Run Code Online (Sandbox Code Playgroud)

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

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExcludeFromJacocoGeneratedReport {}
Run Code Online (Sandbox Code Playgroud)

在您的方法中使用此注释以将其免于覆盖,如下所示。

public class Something
{
    @ExcludeFromJacocoGeneratedReport
    public void someMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

  • @ub1k :) 命名很重要! (5认同)
  • 我只是喜欢你的政治能力,并且让注释听起来不像代码是“生成的”(这不是真的),而是好像你指的是“生成的报告” (4认同)
  • 是的@DonRhummy。我可以看到在 Sonarcloud 分析中跳过了用此注释的方法 (2认同)

God*_*din 7

我有一些Java代码想要从代码覆盖率中排除。我该怎么做?我希望能够添加注释。有没有一种方法可以配置或扩展jacoco(在gradle中使用)以使用此功能?

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

在页面https://github.com/jacoco/jacoco/wiki/FilteringOptions#annotation-based-filtering(专用于开发人员)上,这被记录为将来版本的想法。

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

  • @Rogério 我不想涵盖用于 Q&D 测试的 main() 方法或如何使用该类的示例。这天真地看起来像是一个合法的用例。 (2认同)

小智 5

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

在 Project Lombok 文档中查看更多信息:https : //projectlombok.org/features/configuration