結論
JaCoCoでは行単位のC1カバレッジが取れないのだ、OpenCloverでは行単位のC1カバレッジが取れそう。C1が100%実行されていないのに100%と表示されてしまうといった問題もなさそう。
手順
手元の環境ではなぜかEclipseでOpenCloverを使う手順が上手く動かなかったので、ひとまずMavenから実行する方法で試してみた。
なお、Windows上のJavaではシステムプロパティuser.home
は環境変数%HOME%
でなく%USERPROFILE%
をもとに設定されるみたい。mavenのsettings.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回実行していると報告することもない。