JaCoCoを利用してテストカバレッジを出力してみる


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

タイトルとURLをコピーしました