Android 单元测试覆盖率计算 - work hard work smart
在工程下面的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