如何配置Maven的JaCoCo插件,使覆盖率报告包含测试文件?
如何让JaCoCo同时统计主代码和测试代码的覆盖率
嗨,我明白你的需求——默认的JaCoCo配置只会统计src/main下的业务代码覆盖率,但你希望同时看到src/test里测试代码自身的覆盖情况,这完全可以通过调整插件配置实现。
下面是修改后的完整JaCoCo Maven插件配置,我会逐一解释关键改动:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.4</version> <executions> <execution> <id>jacoco-initialize</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>jacoco-report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> <configuration> <!-- 包含所有类文件,默认只包含主代码类 --> <includes> <include>**/*.class</include> </includes> <!-- 同时指定主源码和测试源码目录,让报告能关联到测试代码的源文件 --> <sourceDirectories> <sourceDirectory>${project.main.sourceDirectory}</sourceDirectory> <sourceDirectory>${project.test.sourceDirectory}</sourceDirectory> </sourceDirectories> <!-- 同时扫描主代码编译后的class和测试代码编译后的class --> <classDirectories> <classDirectory>${project.build.outputDirectory}</classDirectory> <classDirectory>${project.build.testOutputDirectory}</classDirectory> </classDirectories> </configuration> </execution> </executions> </plugin>
关键改动说明:
<includes>:默认JaCoCo只会统计src/main编译后的class,这里设置为**/*.class,确保所有编译后的类(包括测试类)都被纳入统计范围。<sourceDirectories>:添加测试源码目录,这样生成的HTML报告里可以直接查看测试代码的覆盖详情,而不只是主代码。<classDirectories>:明确指定测试代码编译后的class文件目录(默认是target/test-classes),让JaCoCo能找到测试类的字节码进行统计。
验证方式:
执行命令 mvn clean test,待构建完成后,打开target/site/jacoco/index.html,就能在报告中看到测试代码的覆盖率数据了。如果需要更精细的范围控制(比如只统计某个包的测试类),可以修改<includes>里的规则,比如<include>com/yourpackage/**/*.class</include>。
内容的提问来源于stack exchange,提问作者Alex028502




