4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GradleでTestタスク実施と同時にJacocoでレポートを出力する

Posted at

前書き

Gradle で Test タスクを実施したら、自動的に Jacoco でカバレッジレポートを出力してくれたらいいなー
を満たすための build.gradle の設定になります。

個人的に Java & SpringBoot で開発することが多いため、build.gradle にはその設定が含まれていますが、Test タスク → Jacoco レポート出力を満たすためだけであればそのあたりの設定は不要です。
なお、ここで上げている build.gradle は Spring Initializr で生成したプロジェクトの雛形を元に編集しました。

環境

  • Gradle
  • Java 8
  • Jacoco
  • JUnit (spring-boot-starter-testに含まれるものを使用)

なお、動作確認は以下の環境下で行いました。

  • Javaの文字コード:UTF-8
  • OS: Windows 10, Mac 10.15.1 (Catalina)

build.gradle

plugins {
	id 'org.springframework.boot' version '2.2.1.RELEASE'
	id 'io.spring.dependency-management' version '1.0.8.RELEASE'
	id 'java'
	id 'jacoco'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	maven {
		url "https://plugins.gradle.org/m2/"
	}
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

// コンパイル時に使用する文字コードをUTF-8で固定する
tasks.withType(AbstractCompile).each { it.options.encoding = 'UTF-8' }
tasks.withType(Test) {
	systemProperty "file.encoding", "UTF-8"
}

// testタスクの後にjacocoTestReportタスクを実施する
test.finalizedBy jacocoTestReport

// jacocoのレポートから除外するクラスファイル。ここに除外したいクラスを列挙する
def coverageExcludeFiles = [
		// 内部クラスやLambda匿名クラスを排除
		'**/*$*.class',
		'**/*$lambda$*.class',
]

// jacocoTestReportタスク。前述の「jacocoのレポートから除外するクラスファイル」の設定を組み込んだタスクにしています。
jacocoTestReport {
	reports {
		html.enabled = true
	}
	afterEvaluate {
		classDirectories = files(classDirectories.files.collect {
			fileTree(
					dir: it,
					exclude: coverageExcludeFiles)
		})
	}
}

補足

gradle test or ./gradlew test
を実施するとjacocoでカバレッジレポートを出力してくれます。
なお、上記の設定を行うと、
gradle build or ./gradlew build
を行ってもTestタスクの直後にJacocoでカバレッジレポートが出力されます。
使い勝手は善し悪しがあると思いますが、CIで毎回カバレッジレポートを出したい!といったときにちょっとだけ便利になるかもしれません。

当然ではありますが、jacocoTestReportタスクを個別に実施してもレポートは出力されますが、カバレッジレポートの出力元となるTestタスクを実施しないと意味はないです。

また、build.gralde 内で文字コードをUTF-8で固定していますが、この記述がないとWindows環境ではカバレッジレポートに出力されるソースコードの日本語文字列が文字化けしました。ソースコードがUTF-8で記載かつWindows環境の場合はご参考にしてください。

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?