android - JaCoCo Gradle प्लगइन के साथ एंड्रॉइड टेस्ट कोड कवरेज




testing code-coverage (3)

मैं ग्रैडल और एंड्रॉइड परीक्षण के लिए नया हूं लेकिन मैंने पहले ही अपने एंड्रॉइड प्रोजेक्ट को ग्रैडल के साथ बनाने के लिए परिवर्तित कर दिया है।

अब मैं ग्रैडल के जैकोको प्लगइन के साथ एक एंड्रॉइड प्रोजेक्ट का टेस्ट कवरेज करने की कोशिश कर रहा हूं।

मैंने अपनी build.gradle फ़ाइल में निम्न जोड़ा है:

apply plugin: 'jacoco'

और जब मैं निम्नलिखित त्रुटि में "gradle jacocoTestReport" चलाता हूं:

Task 'jacocoTestReport' not found in root project '<project name>'.

प्रलेखन से मुझे प्लगइन 'जावा' भी लागू करना है, लेकिन यह प्लगइन 'एंड्रॉइड' के साथ संघर्ष करता है।

क्या इसके चारों ओर एक रास्ता है?

अग्रिम में धन्यवाद।


आप इस ग्रैडल प्लगइन का उपयोग करने का प्रयास कर सकते हैं: https://github.com/arturdm/jacoco-android-gradle-plugin

यहां जवाब में थोड़ा और है https://.com/a/32572259/1711454 ।


क्या आपने निम्न जोड़ने का प्रयास किया था:

jacocoTestReport {
   group = "Reporting"
   description = "Generate Jacoco coverage reports after running tests."
   additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
}

और उसके बाद चलाने के बजाए ./gradlew jacocoTestReport रन ./gradlew test jacocoTestReport

यदि सब कुछ ठीक हो जाता है तो आपको परीक्षण build/reports/jacoco/test/html/index.html पर परीक्षा परिणाम मिलना चाहिए।


यहां बताया गया है कि मैं Jacoco का उपयोग कैसे कर रहा हूं:

buildscript {
  repositories {
    mavenLocal()
    mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.12.+'
    classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+'
  }
}

apply plugin: 'com.android.application'
apply plugin: 'robolectric'
apply plugin: 'jacoco'

android {
  compileSdkVersion 20
  buildToolsVersion "20.0.0"

  defaultConfig {
    applicationId "YOUR_PACKAGE_NAME"
    minSdkVersion 10
    targetSdkVersion 20
    testHandleProfiling true
    testFunctionalTest true
  }
  buildTypes {
    debug {
      testCoverageEnabled false
    }
    release {
      runProguard false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
  }
  jacoco {
    version "0.7.1.201405082137"
  }
  packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LGPL2.1'
    exclude 'META-INF/services/javax.annotation.processing.Processor'
    exclude 'LICENSE.txt'
  }
}

robolectric {
  include '**/*Test.class'
  exclude '**/espresso/**/*.class'

  maxHeapSize "2048m"
}

jacoco {
  toolVersion "0.7.1.201405082137"
}

// Define coverage source.
// If you have rs/aidl etc... add them here.
def coverageSourceDirs = [
    'src/main/java',
]

task jacocoTestReport(type: JacocoReport, dependsOn: "connectedDebugAndroidTest") {
  group = "Reporting"
  description = "Generate Jacoco coverage reports after running tests."
  reports {
    xml.enabled = true
    html.enabled = true
  }
  classDirectories = fileTree(
      dir: './build/intermediates/classes/debug',
      excludes: ['**/R*.class',
                 '**/*$InjectAdapter.class',
                 '**/*$ModuleAdapter.class',
                 '**/*$ViewInjector*.class'
      ])
  sourceDirectories = files(coverageSourceDirs)
  executionData = files("$buildDir/jacoco/testDebug.exec")
  // Bit hacky but fixes https://code.google.com/p/android/issues/detail?id=69174.
  // We iterate through the compiled .class tree and rename $$ to $.
  doFirst {
    new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
      if (file.name.contains('$$')) {
        file.renameTo(file.path.replace('$$', '$'))
      }
    }
  }
}


dependencies {
  androidTestCompile('junit:junit:4.11') {
    exclude module: 'hamcrest-core'
  }
  androidTestCompile('org.robolectric:robolectric:2.3') {
    exclude module: 'classworlds'
    exclude module: 'maven-artifact'
    exclude module: 'maven-artifact-manager'
    exclude module: 'maven-error-diagnostics'
    exclude module: 'maven-model'
    exclude module: 'maven-plugin-registry'
    exclude module: 'maven-profile'
    exclude module: 'maven-project'
    exclude module: 'maven-settings'
    exclude module: 'nekohtml'
    exclude module: 'plexus-container-default'
    exclude module: 'plexus-interpolation'
    exclude module: 'plexus-utils'
    exclude module: 'wagon-file'
    exclude module: 'wagon-http-lightweight'
    exclude module: 'wagon-http-shared'
    exclude module: 'wagon-provider-api'
    exclude group: 'com.android.support', module: 'support-v4'
  }
}

उपर्युक्त कोड में https://code.google.com/p/android/issues/detail?id=69174 लिए वर्कअराउंड भी शामिल है।

अधिक जानकारी: http://chrisjenx.com/gradle-robolectric-jacoco-dagger/





jacoco