You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置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

火山引擎 最新活动