You need to enable JavaScript to run this app. 如何让mvn cobertura:cobertura不执行多于mvn test的测试用例
优惠活动
大模型
产品
解决方案
定价
更多

如何让mvn cobertura:cobertura不执行多于mvn test的测试用例

问题原因
  • cobertura:cobertura 目标默认会自动触发Maven构建生命周期执行到test阶段,相当于它会自行重新跑一遍测试流程。你之前给mvn test配置的排除DSS测试的规则,大概率是仅在手动执行mvn test时生效,或者没有配置成全局的surefire插件规则,所以cobertura触发测试执行的时候没有读到排除规则,就把所有测试都跑了。
  • 如果你是把CEF DSS作为子模块引入项目的,cobertura默认会扫描所有子模块的测试用例执行,没有单独配置子模块排除的话,也会触发DSS自带的测试套件运行。
解决方案

方法一:配置全局测试排除规则(推荐)

直接给maven-surefire-plugin配置全局的DSS测试排除规则,所有场景下执行测试都会跳过DSS的用例,修改你的pom.xml:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>请替换为你当前使用的插件版本</version>
  <configuration>
    <excludes>
      <!-- 替换为实际DSS测试类所在的包路径,匹配所有DSS测试用例 -->
      <exclude>eu/europa/ec/cef/dss/**/*Test.java</exclude>
    </excludes>
  </configuration>
</plugin>

配置完成后再执行mvn cobertura:cobertura就会自动跳过DSS的测试用例。

方法二:复用已有测试结果生成报告

如果不想修改pom配置,可以分两步执行命令,让cobertura不要自己重新跑测试,直接用你手动执行mvn test生成的测试结果生成报告:

  1. 先执行正常的测试命令(已经配置过跳过DSS测试):mvn test
  2. 执行cobertura命令时加参数禁止重新执行测试:
mvn cobertura:cobertura -Dcobertura.skipExec=true

方法三:排除DSS子模块的扫描

如果DSS是你项目的子模块,直接在cobertura插件的配置里排除该子模块即可:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>cobertura-maven-plugin</artifactId>
  <version>请替换为你当前使用的插件版本</version>
  <configuration>
    <modules>
      <!-- 替换为实际的DSS子模块的 artifactId -->
      <module>!dss-submodule-name</module>
    </modules>
    <!-- 也可以同步配置不统计DSS代码的覆盖率,避免影响你自有代码的覆盖率数据 -->
    <instrumentation>
      <excludes>
        <exclude>eu/europa/ec/cef/dss/**/*.class</exclude>
      </excludes>
    </instrumentation>
  </configuration>
</plugin>

内容的提问来源于stack exchange,提问作者Wouter Verhelst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 05:15:04