You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置JMockit与Jacoco时无法生成测试覆盖率报告求助

问题解决:JMockit + Jacoco + TestNG 覆盖率报告生成失败及NPE问题

问题根源

Jacoco和JMockit都依赖Java Agent实现字节码操作,二者的Agent参数需要同时注入JVM启动参数。原配置中硬写JMockit的argLine会覆盖Jacoco自动注入的Agent参数,导致Jacoco无法收集覆盖率数据,触发"Skipping JaCoCo execution due to missing execution data file"提示;若移除JMockit的argLine配置,JMockit无法获取Instrumentation实例,就会抛出mockit.internal.startup.Startup.instrumentation空指针异常。

解决方案

调整Maven Surefire插件的argLine配置,合并Jacoco与JMockit的Agent参数:

  1. 修改maven-surefire-plugin的argLine配置
    把硬编码的JMockit Agent参数改成继承Jacoco自动注入的参数,再追加JMockit的Agent配置:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.version}</version>
    <configuration>
        <!-- 用@{argLine}继承Jacoco的Agent参数,再追加JMockit的Agent -->
        <argLine>@{argLine} -javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar</argLine>
        <suiteXmlFiles>
            <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
</plugin>
  1. 确保Jacoco插件配置正确
    Jacoco插件需绑定到verify阶段,保证测试执行后生成数据文件:
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>${jacoco.version}</version>
    <executions>
        <execution>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>verify</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

验证步骤

执行以下Maven命令:

mvn clean verify site

执行完成后,就能在target/site/jacoco目录下找到生成的覆盖率报告。

内容的提问来源于stack exchange,提问作者Manoj Madushanka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:22:11