Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

OpenCloverでC1カバレッジが取れるか?

結論

JaCoCoでは行単位のC1カバレッジが取れないのだ、OpenCloverでは行単位のC1カバレッジが取れそう。C1が100%実行されていないのに100%と表示されてしまうといった問題もなさそう。

手順

手元の環境ではなぜかEclipseでOpenCloverを使う手順が上手く動かなかったので、ひとまずMavenから実行する方法で試してみた。

なお、Windows上のJavaではシステムプロパティuser.home環境変数%HOME%でなく%USERPROFILE%をもとに設定されるみたい。mavensettings.xml%HOME%\.m2でなく%USERPROFILE%\.m2以下に配置する。settings.xmlの内容は以下。

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <pluginGroups>
    <pluginGroup>org.openclover</pluginGroup>
  </pluginGroups>
</settings>

コードおよび結果

テスト対象のクラスは以下。 Class for code coverage test · GitHub

得られたXMLのレポートファイルは以下。 OpenClover coverage result · GitHub

評価

結果、C1カバレッジを行単位で取得できた。Coverletのように取っていないはずのC1カバレッジを通っているよう報告するとか、if-elseifでマッチしなかったケースを無視するとかもなく、また1回しか実行していない行を2回実行していると報告することもない。 f:id:satob:20211205031053p:plain f:id:satob:20211205031101p:plain