work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Android 单元测试覆盖率计算

Posted on 2018-01-31 10:47  work hard work smart  阅读(388)  评论(0编辑  收藏  举报

在工程下面的build.gradle 增加配置

1.增加Plugin

apply plugin: 'jacoco'

 

2. 增加jacoco版本

jacoco{
    version "0.7.4.201502262128"
}

 

3.申明一个gradle task

   //jacocoTestReport依赖于connectedAndroidTest task,所以在执行jacoco之前需要先执行connectedAndroidTest,也就是说需要连接测试机(模拟器or真机)
    task jacocoTestReport(type:JacocoReport,dependsOn:"connectedAndroidTest"){
        group = "Reporting"
        description = "Generate Jacoco coverage reports after running tests."
        reports{
            xml.enabled = false
            html.enabled = true
            csv.enabled = false
        }
        classDirectories = fileTree(
                dir : "$buildDir/intermediates/classes/debug",
    excludes : [
            '**/*Test.class',
            '**/R.class',
            '**/R$*.class',
            '**/BuildConfig.*',
            '**/Manifest*.*'
    ]
    )
    def coverageSourceDirs = ['src/main/java']
    additionalSourceDirs = files(coverageSourceDirs)
    sourceDirectories = files(coverageSourceDirs)
    additionalClassDirs = files(coverageSourceDirs)
    executionData = files("$buildDir/outputs/code-coverage/connected/coverage.ec")
}

  

4. 打开testCoverageEnabled

 buildTypes {
            debug {
                testCoverageEnabled = true
            }
        }

  

 

5. 完整的配置
apply plugin: 'com.android.application'
apply plugin: 'jacoco'

android {
    compileSdkVersion 25
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "com.example.androidunittest"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            testCoverageEnabled = true
        }
        buildTypes {
            debug {
                testCoverageEnabled = true
            }
        }

        jacoco{
            version "0.7.4.201502262128"
        }
    }


//jacocoTestReport依赖于connectedAndroidTest task,所以在执行jacoco之前需要先执行connectedAndroidTest,也就是说需要连接测试机(模拟器or真机)
    task jacocoTestReport(type:JacocoReport,dependsOn:"connectedAndroidTest"){
        group = "Reporting"
        description = "Generate Jacoco coverage reports after running tests."
        reports{
            xml.enabled = false
            html.enabled = true
            csv.enabled = false
        }
        classDirectories = fileTree(
                dir : "$buildDir/intermediates/classes/debug",
                excludes : [
                        '**/*Test.class',
                        '**/R.class',
                        '**/R$*.class',
                        '**/BuildConfig.*',
                        '**/Manifest*.*'
                ]
        )
        def coverageSourceDirs = ['src/main/java']
        additionalSourceDirs = files(coverageSourceDirs)
        sourceDirectories = files(coverageSourceDirs)
        additionalClassDirs = files(coverageSourceDirs)
        executionData = files("$buildDir/outputs/code-coverage/connected/coverage.ec")
    }



    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:23.1.1'
        compile 'com.android.support.constraint:constraint-layout:1.0.2'
        testCompile 'junit:junit:4.12'

        androidTestCompile 'com.android.support.test:runner:0.5'
        androidTestCompile 'com.android.support.test:rules:0.5'
        androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'

    }
}

  

6. 运行报告

gradlew jacocoTestReport

运行生成报告命令可能出现的问题

1). Could not find com.android.tools.build:gradle:2.2.3

解决方法:

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
    }

}

  

2). Unsupported major.minor version 52.0

解决方法:

 

 

 

参考:http://blog.csdn.net/it_talk/article/details/50267573