AndroidStudio: 3.6.2 Kotlin Версия: 1.3.61 Gradle: 3.5.3 jacoco.core: 0.8.5
В настоящее время я использую плагин Jacoco (то есть classpath 'org.jacoco: org.jacoco.core: 0.8.5 '), который работает нормально. Даже он показывает отчет о покрытии с процентами. но отчет о покрытии охватывает только androidTest тестовых наборов . Он не охватывает test пакетов тестовых случаев .
Так как отчет о покрытии охватывает оба пакета тестовых случаев , то есть тест и androidTest
Код: build.gradle
buildscript {
ext.kotlin_version = '1.3.61'
repositories {
google()
jcenter()
maven {
url 'https://maven.fabric.io/public'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
// Jacoco plugin
classpath 'org.jacoco:org.jacoco.core:0.8.5'
}
}
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.61'
id "org.sonarqube" version "2.8"
}
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
flatDir {
dirs '../aars'
}
}
}
task cleanProject(type: Delete) {
delete rootProject.buildDir
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
jacoco-config.gradle Код:
apply plugin: 'jacoco'
jacoco {
toolVersion = '0.8.5'
}
android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
testOptions.unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
task jacocoTestReport { self ->
build.dependsOn self
}
android.testVariants.all {
def variant = it.testedVariant
def name = variant.name.capitalize()
tasks.create(name: "jacoco${name}TestReport", type: JacocoReport) { self ->
group = 'Reporting'
description = "Generates Jacoco coverage reports on the ${variant.name} variant"
reports {
xml.enabled = true
html.enabled = true
}
sourceDirectories = files([
"src/main/java", "src/main/kotlin",
"src/${variant.name}/java", "src/${variant.name}/kotlin"
])
classDirectories = fileTree(dir: buildDir, includes: [
"intermediates/classes/${variant.name}/**",
"tmp/kotlin-classes/${variant.name}/**"
],
excludes: ['**/R.class',
'**/R$*.class',
'**/BuildConfig.*',
'**/Manifest*.*',
'android/**/*.*',
'**/DataBinder*.*',
'**/androidx.databinding/**',
'**/androidx.databinding.library.baseAdapters/**',
'**/com.example.android.databinding/**'])
executionData = fileTree(dir: buildDir, includes: [
"jacoco/test${name}UnitTest.exec",
'outputs/code-coverage/connected/*coverage.ec'
])
doLast {
println "Wrote HTML coverage report to ${reports.html.destination}/index.html"
println "Wrote XML coverage report to ${reports.xml.destination}"
}
dependsOn "test${name}UnitTest", "create${name}CoverageReport"
jacocoTestReport.dependsOn self
}
}
А также, отчет о покрытии включает эти пакеты, т. Е. androidx.databinding и androidx.databinding.library.baseAdapters , при генерации отчетов. Как исключить эти пакеты? Даже я написал код для исключения этих пакетов, но он не работает. См. Ниже Pi c: ![enter image description here](https://i.stack.imgur.com/f1ZSS.png)