我将如何添加注释以从 jacoco 代码覆盖率报告中排除方法?
How would I add an annotation to exclude a method from a jacoco code coverage report?
我在 Java 中有一些代码想从代码覆盖范围中排除。我该怎么做?我希望能够添加注释。有没有办法配置或扩展 jacoco(在 gradle 中使用)来使用它?
示例:
public class Something
{
@ExcludeFromCodeCoverage
public void someMethod() {}
}
I have some code in Java that I want to exclude from code coverage. How would I do this? I want to be able to add an annotation. Is there a way to configure or extend jacoco (as used in gradle) to use this?
截至今天,最新发布的 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.Generated
和 groovy.transform.Generated
标记的方法。您可能会滥用它,但出于多种原因我不建议这样做。
Tl;dr
使用 Lombok 中的注释 @lombok.Generated
。
说明
Jacoco 与 Lombok 集成。默认情况下,Lombok 生成的代码被排除在 Jacoco 覆盖范围之外(请参阅 Jacoco 更新日志中的 版本 0.8.0)。您可以在您的方法中滥用 lombok.Generated
,因为它被排除在覆盖率报告之外。
JaCoCo 的 0.8.2 版本中添加了新功能,它过滤掉了 类 和 @Generated 注释的方法。有关详细信息,请参阅以下文档:
Classes and methods annotated with annotation whose retention policy is runtime or class and whose simple name is Generated are filtered out during generation of report (GitHub #731).
您可以在项目的根目录中将lombok.addLombokGeneratedAnnotation = true
设置为lombok.config
。之后,所有 Lombok 生成的代码将被 Jacoco 忽略。
在 Project Lombok 文档中查看更多内容:https://projectlombok.org/features/configuration
由于没有直接的答案,所以做了一些研究并发现了这个 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")
}
您可以创建任何名称包含“已生成”的注释。我在我的代码库中创建了以下内容,以排除方法被包含在 Jacoco 报告中。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExcludeFromJacocoGeneratedReport {}
在您的方法中使用此注解使其免于覆盖,如下所示。
public class Something
{
@ExcludeFromJacocoGeneratedReport
public void someMethod() {}
}
按照@mohamed-anees-a 方法,我得到了这个 kotlin 版本:
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
annotation class ExcludeFromJacocoGeneratedReport
我在 Java 中有一些代码想从代码覆盖范围中排除。我该怎么做?我希望能够添加注释。有没有办法配置或扩展 jacoco(在 gradle 中使用)来使用它?
示例:
public class Something
{
@ExcludeFromCodeCoverage
public void someMethod() {}
}
I have some code in Java that I want to exclude from code coverage. How would I do this? I want to be able to add an annotation. Is there a way to configure or extend jacoco (as used in gradle) to use this?
截至今天,最新发布的 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.Generated
和 groovy.transform.Generated
标记的方法。您可能会滥用它,但出于多种原因我不建议这样做。
Tl;dr
使用 Lombok 中的注释 @lombok.Generated
。
说明
Jacoco 与 Lombok 集成。默认情况下,Lombok 生成的代码被排除在 Jacoco 覆盖范围之外(请参阅 Jacoco 更新日志中的 版本 0.8.0)。您可以在您的方法中滥用 lombok.Generated
,因为它被排除在覆盖率报告之外。
JaCoCo 的 0.8.2 版本中添加了新功能,它过滤掉了 类 和 @Generated 注释的方法。有关详细信息,请参阅以下文档:
Classes and methods annotated with annotation whose retention policy is runtime or class and whose simple name is Generated are filtered out during generation of report (GitHub #731).
您可以在项目的根目录中将lombok.addLombokGeneratedAnnotation = true
设置为lombok.config
。之后,所有 Lombok 生成的代码将被 Jacoco 忽略。
在 Project Lombok 文档中查看更多内容:https://projectlombok.org/features/configuration
由于没有直接的答案,所以做了一些研究并发现了这个 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")
}
您可以创建任何名称包含“已生成”的注释。我在我的代码库中创建了以下内容,以排除方法被包含在 Jacoco 报告中。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExcludeFromJacocoGeneratedReport {}
在您的方法中使用此注解使其免于覆盖,如下所示。
public class Something
{
@ExcludeFromJacocoGeneratedReport
public void someMethod() {}
}
按照@mohamed-anees-a 方法,我得到了这个 kotlin 版本:
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
annotation class ExcludeFromJacocoGeneratedReport