JaCoCoを利用して取得していきたいと思います。
Gradleを利用していきます。
※カバレッジ・・・所定のプログラムがテストによってどれくらい網羅しているか(実行されたか)を表しているもの
JaCoCo
JaCoCoはオープンソースでJava用のコードカバレッジライブラリです。
簡単にテストコードのカバレッジをはかることができます。
実装
今回はGradleのプロジェクトになるので「build.gradle」のplugins内に以下を追加します。
テストコードはJUnitを利用します。
id 'jacoco'
追加後、gradleプロジェクトのリフレッシュを行います。
eclipseを利用の場合
今回テスト対象のメソッドは以下とします。
package com.example.demo;
public class DemoApplication {
public int calc(int num) {
int result;
if(num % 2 == 0 || num % 3 == 0) {
result = num * 3;
} else {
result = num * 2;
}
return result;
}
}
テストコード
※カバレッジが変わることを確認するため、一部コメントアウトしています。
package com.example.demo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
class DemoApplicationTests {
private final DemoApplication target = new DemoApplication();
@Nested
class calc {
@Test
void 値が2の倍数のパターン() {
int result = target.calc(2);
assertEquals(6, result);
}
// @Test
// void 値が3の倍数のパターン() {
// int result = target.calc(3);
// assertEquals(9, result);
// }
// @Test
// void 値が2かつ3で割り切れないパターン() {
// int result = target.calc(5);
// assertEquals(10, result);
// }
}
}
レポート出力
出力方法を2パターン紹介します。
「eclipse上から実行」の方で詳しいレポートの説明をしています。
eclipse上から実行
eclipseで実行する場合、「Gradle Tasks」→「対象プロジェクト」→「verification」を開きます。
「test」を実行後、「jacocoTestReport」を実行します。
「test」を実行すると、「build/reports/tests/test/index.html」に実行結果が出力されます。
テストが成功したかどうかが出力されます。
「jacocoTestReport」を実行すると、「build/reports/jacoco/test/html/index.htm」にカバレッジが出力されます。
リンクを選択すると、各メソッドが表示されます。
メソッドを選択すると、詳細が確認可能です。
緑色の箇所・・・実行されているルート
黄色の箇所・・・条件には合致しているが、一部の条件で合致しているテストケースがない
今回で言うと「num % 3 == 0」のテストケースがない
赤色の箇所・・・実行されていないルート
テストコードの「値が2かつ3で割り切れないパターン」メソッドのコメントアウトを外し再度実行します。
(この時も「test」→「jacocoTestReport」と実行)
Missed Branches(条件分岐)は100%になっていないですが、命令網羅(C0)はできました。
テストコードのコメントアウトをすべてはずして実行すると、すべて100%となります。
コマンドライン上から実行
対象プロジェクト配下で以下を実行
./gradlew test jacocoTestReport
eclipseから実行したとき同様、レポートが出力されます。
参考文献
・gradle
https://docs.gradle.org/current/userguide/jacoco_plugin.html