Android Gradle Code Coverage

后端 未结 2 1350
被撕碎了的回忆
被撕碎了的回忆 2020-12-31 14:18

I have a simple android project with test cases.

ProjNameProject
--build.gradle
--ProjName
----build.gradle

I see that by default android\'

相关标签:
2条回答
  • 2020-12-31 14:27

    JaCoCo support was added to the Android gradle plugin v0.10 (http://tools.android.com/tech-docs/new-build-system).

    Enable in the tested Build Type with testCoverageEnabled = true
    
    android {
      jacoco {
        version = '0.6.2.201302030002'
      }
    }
    

    I was able to get JaCoCo coverage working with Robolectric by following http://chrisjenx.com/gradle-robolectric-jacoco-dagger/.

    apply plugin: 'android'
    apply plugin: 'robolectric'
    apply plugin: 'jacoco'
    
    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        compile 'com.android.support:appcompat-v7:19.1.+'
    
        androidTestCompile fileTree(dir: 'libs/test', include: '*.jar')
        androidTestCompile 'junit:junit:4.11'
        androidTestCompile 'org.robolectric:robolectric:2.3'
        androidTestCompile 'com.squareup:fest-android:1.0.+'
    }
    
    robolectric {
        // Configure the set of classes for JUnit tests
        include '**/*Test.class'
        exclude '**/*AbstractRobolectricTestCase.class'
    
        // Configure max heap size of the test JVM
        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',
        'src/gen'
    ]
    
    ...
    
    // Add JaCoCo test reporting to the test task
    // http://chrisjenx.com/gradle-robolectric-jacoco-dagger/
    task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") {
        group = "Reporting"
        description = "Generate Jacoco coverage reports after running tests."
        reports {
            xml.enabled = true
            html.enabled = true
        }
    
        // Class R is used, but usage will not be covered, so ignore this class from report
        classDirectories = fileTree(
            dir: './build/intermediates/classes/debug',
            excludes: ['**/R.class',
                       '**/R$*.class'
        ])
        sourceDirectories = files(coverageSourceDirs)
        executionData = files('build/jacoco/testDebug.exec')
    }
    
    0 讨论(0)
  • 2020-12-31 14:36

    Emma support is planned to be released soon within the new Android build system : http://tools.android.com/tech-docs/new-build-system/roadmap

    Up to now there is no official way to run emma with android via gradle. I guess instrumenting can be achieved pretty easily but then, you will miss a way to tell Android to run tests with coverage on. Moreover, there is currently no way (to the best of my knowledge) to pull down emma runtime coverage data from the device.

    This project can interest you : https://github.com/stephanenicolas/Quality-Tools-for-Android. It will be updated as soon as emma will make it into Android Gradle plugin.

    ----UPDATE

    This plugin has no chance to work with Android has it uses the Java plugin which is incompatible with Android plugin.

    0 讨论(0)
提交回复
热议问题