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