ソナーレストAPIからユニットテストカバレッジパーセンテージメトリックを取得しています。
定義された値を下回った場合、ビルドを失敗させるにはどうすればよいですか?
JaCoCo
はその機能を提供します。
構成ルール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であることを確認してください)。
この例では、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 ...)。正規表現も使用できる場合があります。
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
コマンド。
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>