[英]Measuring tests coverage in multi-module and dynamic feature module Android project using Jacoco
[英]How to create an aggregated Jacoco report for a multi-module project?
几天来,我一直在寻找一种解决方案,用于合并多模块 Android 项目的多个Jacoco
报告,以便立即将它们发送到Sonarcloud
。 我已经检查了大量 Stackoverflow 帖子和其他内容,例如博客、Github 存储库、 Gradle 论坛等,但不幸的是,没有一个解决方案适合我。
如果有人在这里与我分享示例项目或代码片段,我将不胜感激。
Gradle version: 7.0.2
Kotlin version: 1.5.21
JDK: 11
下面的代码段也不适合我
/**
* Root task that generates an aggregated Jacoco test coverage report for all sub-projects
*/
task jacocoFullReport(type: JacocoReport, group: 'Coverage reports') {
group = 'Reporting'
description = 'Generates an aggregate report from all subprojects'
tasks.withType(Test) {
ignoreFailures true
}
def projects = subprojects
//noinspection GrUnresolvedAccess
dependsOn(projects.jacocoReport)
final source = files(projects.jacocoReport.sourceDirectories)
additionalSourceDirs.setFrom source
sourceDirectories.setFrom source
classDirectories.setFrom files(projects.jacocoReport.classDirectories)
executionData.setFrom files(projects.jacocoReport.executionData)
reports {
html {
enabled true
destination file('build/reports/jacoco/html')
}
csv {
enabled true
destination file('build/reports/jacoco/jacocoFullReport.csv')
}
}
doFirst {
//noinspection GroovyAssignabilityCheck
executionData.setFrom files(executionData.findAll { it.exists() })
}
}
这里的工作示例如何创建聚合 jacoco 报告: https://github.com/SurpSG/jacoco-gradle-plugin-merge-coverage
task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
description = 'Generates an aggregate report from all subprojects'
dependsOn(subprojects.test)
additionalSourceDirs.from = files(subprojects.sourceSets.main.allSource.srcDirs)
sourceDirectories.from = files(subprojects.sourceSets.main.allSource.srcDirs)
classDirectories.from = files(subprojects.sourceSets.main.output)
executionData.from = files(subprojects.jacocoTestReport.executionData)
reports {
html.enabled true
}
}
我刚刚创建了这个演示项目,说明了如何使用buildSrc
ad-hoc 插件进行归档,该插件依赖于 Gradle 的jacoco-report-aggregation
和 Android Gradle 插件的原生jacoco
支持。
稍后您可以通过将其添加到根项目中轻松地将其与sonarqube
链接:
plugins {
coverage // comes from `buildSrc/src/main/kotlin/coverage.gradle.kts`
id("org.sonarqube") version "3.4.0.2513"
}
sonarqube {
properties {
tasks.jacocoTestReport.configure {
property("sonar.coverage.jacoco.xmlReportPaths", reports.xml.outputLocation.get().asFile)
}
}
}
tasks.sonarqube.configure {
dependsOn(tasks.jacocoTestReport)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.