一、简介
在本文中,我们将看到如何从 JaCoCo 测试覆盖率报告中减少部分类和包。
通常,潜在的候选对象可以是配置类、POJO、DTO 以及生成的字节码。这些不知道自己的业务逻辑,将从他们的报告中排除以提供更好的测试覆盖率可能会很有用。
我们将探索 Maven 和 Gradle 项目中的各种排除方法。
2. 例子
让我们从一个示例项目开始,其中所有的代码已经被测试覆盖。
接下来,我们将通过运行mvn clean package
或mvn jacoco:report
生成覆盖率报告:
此处,此报告显示我们已经拥有需要的覆盖范围,并且应该从 JaCoCo 报告中找遗漏的指示。
3.排除使用插件配置
可以使用标准 * 和 ?** 插件配置中的通配符语法:**
* 匹配零个或多种字符
**匹配零个或多个目录
? 匹配单个字符
3.1. Maven配置
让我们更新Maven插件以添加几个删除的模式:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <configuration> <excludes> <exclude>com/baeldung/**/ExcludedPOJO.class</exclude> <exclude>com/baeldung/**/*DTO.*</exclude> <exclude>**/config/*</exclude> </excludes> </configuration> ... </plugin>
在这里,我们指定了以下排除项:
com.baeldung包下任意子包中
ExcludedPOJO
com.baeldung
com.baeldung
包下的任何包中DTO
结尾的所有类在根或子包中的任何位置声明
config
3.2.摇篮配置
我们也可以在 Gradle 项目中应用相同的排除项。
首先,让我们更新的JaCoCo配置build.gradle
并指定排除列表,使用相同的模式,如前面:
jacocoTestReport { dependsOn test // tests are required to run before generating the report afterEvaluate { classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: [ "com/baeldung/**/ExcludedPOJO.class", "com/baeldung/**/*DTO.*", "**/config/*" ]) })) } }
上面,我们使用包来遍历类目录并关闭与指定模式列表匹配的文件。因此,使用./gradlew jacocoTestReport
或./gradlew clean test
生成报告将按预期排除所有指定的类和包。
正是如此,JaCoCo 插件绑定到test
阶段,它在生成报告之前运行所有测试。
4. 自定义注解
从 JaCoCo 0.8.2 开始,我们可以通过使用具有以下属性的自定义类方法和注释来注释它们来切除:
注释的名称包括
Generated
。注解的保留策略应该是
runtime
或class.
首先,让我们创建注释:
@Documented @Retention(RUNTIME) @Target({TYPE, METHOD}) public @interface Generated { }
现在我们可以注解应该从覆盖率报告中排除的类或方法。
我们先在类级别使用这个注解:
@Generated public class Customer { // everything in this class will be excluded from jacoco report because of @Generated }
解类中的特定方法:
public class CustomerService { @Generated public String getCustomerId() { // method excluded form coverage report } public String getCustomerName() { // method included in test coverage report } }
5.修复Lombok生成的代码
Project Lombok 是一个流行的库,用于减少 Java 项目中的样板和重复代码。
最后,让我们看看如何通过向项目根目录中的**lombok.config
文件添加一个属性来排除所有 Lombok 生成的字节码:**
lombok.addLombokGeneratedAnnotation = true
几乎,此属性将[email protected]
注释添加到所有使用 Lombok 注释注释的类的相关方法、类和字段,例如Product
类。因此,JaCoCo 会忽略所有使用此批注进行批注的构造,并且它们不会显示在报告中。
,我们最后可以在应用上述所有技术排除后的报告:
六、结论
在本文中,我们研究了从 JaCoCo 测试报告中指定排除项的各种方法。
@Generated
最终,我们研究了如何使用配置文件从测试覆盖率报告中删除所有的应用程序配置文件和包。Lombok 生成的代码。
与往常一样,Maven源代码和Gradle源代码可在Github上获得。
0 评论