概要
SpringBoot + Spock + maven で開発をしているんだけれど、せっかくテストも書いているのでカバレッジレポートをCI時に取得するようにする。
pom.xmlにjacocoプラグインを追加
... <build> ... <plugins> ... <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.9</version> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> </executions> </plugin> ... </plugins> </build> ... <reporting> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <reportSets> <reportSet> <reports> <report>report</report> </reports> </reportSet> </reportSets> </plugin> </plugins> </reporting> ...
execution
を設定しておけば、test時に自動でprepare-agent
を実行してくれるreporting
は必要なのかどうか実はよく分かっていない。。- これで
mvn clean test jacoco:report
とかやると、target配下にレポートが出力されるようになる
circle.ymlの修正
test: override: - mvn integration-test - mvn jacoco:report post: - mkdir -p $CIRCLE_ARTIFACTS/site/jacoco - mv target/site/jacoco/ $CIRCLE_ARTIFACTS/site/jacoco
- testブロックでカバレッジレポートを出力するようにする
- testのpostブロックで
$CIRCLE_ARTIFACTS
のレポート成果物を配置する
そうすると、下記のような感じでレポートが参照できるようになる。
https://26-80196016-gh.circle-artifacts.com/0/tmp/circle-artifacts.RCejr3V/site/jacoco/jacoco/index.html
なお、test-postブロックはtestの成否に関わらず実行されてしまうので非効率であるのだが、とりあえずはこのままでよしとしている。
まとめ
実際に適用したプロジェクトは下記。
GitHub - su-kun1899/mysql-visualizer: Mysql Metadata Viewer
jacocoのレポート、UIはパット見時代を感じさせるのだけれど、見やすく分かりやすくて良い。