web-dev-qa-db-ja.com

JUnitカバレッジが特定のしきい値を下回った場合にMavenビルドを失敗させる方法

ソナーレストAPIからユニットテストカバレッジパーセンテージメトリックを取得しています。

定義された値を下回った場合、ビルドを失敗させるにはどうすればよいですか?

12
rathna

JaCoCoはその機能を提供します。

JaCoCo with構成ルール

構成ルールCOVEREDRATIO for LINEおよびBRANCHを使用してJaCoCoプラグインを定義します。

<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であることを確認してください)。

INSTRUCTIONの例-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 beans ...)。正規表現も使用できる場合があります。


ソース:

19
alexbt

Jacoco-maven-pluginの0.8.2または類似のバージョンを使用している場合は、データファイルが定義されていることを確認し、プラグインに次の構成を使用してください。

<execution>
  <id>jacoco-check</id>
  <goals>
    <goal>check</goal>
  </goals>
  <configuration>
    <dataFile>${project.build.directory}/coverage-reports/jacoco.exec</dataFile>
    <rules>
      <rule>
        <element>BUNDLE</element>
        <limits>
          <limit>
            <counter>INSTRUCTION</counter>
            <value>COVEREDRATIO</value>
            <minimum>0.17</minimum>
          </limit>
        </limits>
      </rule>
    </rules>
  </configuration>
</execution>

このコードにより、全体の17%がカバーされます。

これを使用して確認してください

mvn clean verify

コマンド。

0
Specify the datFile location if it is not under default folder.

<execution>
                <id>check</id>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>
                  <dataFile><path-to-jacoc-ut.exec></dataFile>
                 <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>
0
user3069716