В kotlin, как получить покрытие кода для пакета androidTest и тестового пакета в jacoco - PullRequest
0 голосов
/ 15 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...