当前位置: 首页 > 面试题库 >

如果JUnit覆盖率低于特定阈值,如何使Maven构建失败

闻人志
2023-03-14
问题内容

我从声纳休息API获取单元测试覆盖率百分比指标。

如果构建低于定义值,如何使构建失败?


问题答案:

JaCoCo 提供该功能。

定义JaCoCo插件使用配置规则COVEREDRATIOLINEBRANCH

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.7.7.201606060606</version>
  <executions>
    <execution>
      <id>default-prepare-agent</id>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
    </execution>
    <execution>
      <id>check</id>
      <goals>
          <goal>check</goal>
      </goals>
      <configuration>
        <rules>
          <rule>
            <element>CLASS</element>
            <limits>
              <limit>
                <counter>LINE</counter>
                <value>COVEREDRATIO</value>
                <minimum>0.80</minimum>
              </limit>
              <limit>
                <counter>BRANCH</counter>
                <value>COVEREDRATIO</value>
                <minimum>0.80</minimum>
              </limit>
            </limits>
            <excludes>
              <exclude>com.xyz.ClassToExclude</exclude>
            </excludes>
          </rule>
        </rules>
      </configuration>
    </execution>
  </executions>
</plugin>

多种选择

支持的counter选项有:

  • 线
  • 指令
  • 复杂
  • 方法

我相信INSTRUCTION您可以进行一般检查(例如,验证整个项目的覆盖率至少为0.80)。

指令示例-整体指令覆盖率80%

本示例要求整个指令的覆盖率为80%,并且不得错过任何课程:

<rules>
  <rule implementation="org.jacoco.maven.RuleConfiguration">
    <element>BUNDLE</element>
    <limits>
      <limit implementation="org.jacoco.report.check.Limit">
        <counter>INSTRUCTION</counter>
        <value>COVEREDRATIO</value>
        <minimum>0.80</minimum>
      </limit>
      <limit implementation="org.jacoco.report.check.Limit">
        <counter>CLASS</counter>
        <value>MISSEDCOUNT</value>
        <maximum>0</maximum>
      </limit>
    </limits>
  </rule>
</rules>

失败消息

如果覆盖范围不符合预期,它将失败并显示以下消息:

[WARNING] Rule violated for class com.sampleapp.SpringConfiguration: lines covered ratio is 0.00, but expected minimum is 0.80
[WARNING] Rule violated for class com.sampleapp.Launcher: lines covered ratio is 0.33, but expected minimum is 0.80
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

排除项目

在上面的示例中,我设置了<exclude>com.xyz.ClassToExclude</exclude>。我认为您会发现需要添加许多排除项。项目通常包含许多无法测试/测试的类(Spring
Configuration,Java Bean …)。您也许也可以使用正则表达式

资料来源:

  • http://choudhury.com/blog/2014/02/25/enforcing-minimum-code-coverage
  • http://www.eclemma.org/jacoco/trunk/doc/maven.html
  • http://www.eclemma.org/jacoco/trunk/doc/check-mojo.html


 类似资料:
  • 问题内容: 如果行或分支覆盖范围低于给定的阈值,我试图将我的WAR项目构建配置为失败。我一直在使用Java Power Tools 一书中第455页提供的配置,但是没有成功。这是我的项目的Maven 2 POM的相关代码段: 就像我说的那样,覆盖率报告工作正常,问题在于,如果行或分支覆盖率低于我指定的阈值,则“安装”目标不会失败。有人能正常工作吗?如果是这样,那么您的POM是什么样的?您使用的是哪

  • 问题内容: 我制作一个可以执行的makefile 。如果coverage小于X,是否有可能使命令失败?我该怎么办? 问题答案: 您可以在测试中使用该功能。TestMain可以充当测试的自定义入口点,然后您可以调用以获取对覆盖率统计信息的访问。 因此,例如,如果您希望失败率低于80%,则可以将其添加到软件包的测试文件之一中: 然后将调用此入口点,您将失败: 请注意,返回的数字低于测试报告的数字。我看

  • 我正在使用来衡量我的测试的代码覆盖率。我已经启用了分支机构覆盖,但我不能完全理解该报告。 没有分支保险,我得到100%的保险: 启用分支覆盖: 有问题的来源可以在这里找到。 <代码>21- 然而,<代码>53-

  • 我面临以下问题, [错误]无法在项目 Vsts 上执行目标组织 apache.maven.plugins:maven-antrun-plugin:1.8:run(默认):发生蚂蚁构建异常:创建报告时出错 [ERROR]关于Ant部件……@8:11 in/__w/49/s/target/antrun/build main。xml:分析myapp/target时出错/demo.war@WEB-INF/

  • 问题内容: 如果不满足覆盖率阈值(即覆盖率必须至少为80%或构建失败),那么对于给定的项目,我曾见过许多使Maven支持的Jenkins构建失败的文章。 我想知道是否有一种方法可以配置Jenkins使构建失败,如果覆盖率低于上一个构建,即如果构建N的覆盖率是20%,而N + 1的覆盖率是19%,那么构建将失败。我不想设定明确的门槛,但我希望覆盖范围保持稳定或随着时间的推移而提高。 问题答案: 将最

  • 我在所有这些过程中只使用了“命令行”,我想这样做。(不使用Ant、maven、gradle等) 我想运行 Junit 测试用例和 JaCoCo 覆盖率估计。 首先,下面是我的代码 : : 2个java文件位于< code>C\Cal中,< code>Cal文件夹包含4个jar文件(< code>junit-4.12.jar 、< code > ham crest-core-1.3 . jar 、<