关于Android studio中代码覆盖率
2016-08-02 09:18
369 查看
目前Android studio中gradle已集成jacoco,默认无需手动加入jacoco插件即可生成报告。这里将添加jacoco插件的方法步骤写下,纯粹供学习以更了解gradle。
一,gradle默认方式(无需手动添加jacoco插件):
1,android studio新建项目时,会自动生成androidTest文件夹,同时文件夹下生成ApplicationTest。我们先在ApplicationTest里添加一些测试代码:
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE.png)
2,Gradle默认支持生成代码覆盖率报告,我们需要做的只是在buil.gradle中设置testCoverageEnabled为true:
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%281%29.png)
3,然后打开cmd,进入项目文件夹根目录下,执行命令:gradle clean createDebugCoverageReport
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%282%29.png)
等待片刻,出现success
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%283%29.png)
4,此时在项目文件夹的\app\build\reports\coverage\debug的目录下就能看到代码覆盖率的报告,打开index.html就能看到详细报告了:
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%284%29.png)
二,手动添加jacoco插件生成
1,同上第一步,在ApplicationTest里添加一些测试代码;
2,build.gradle配置要复杂点:
添加classpath
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%285%29.png)
添加jacoco插件
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%286%29.png)
设置testCoverageEnabled为true
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%287%29.png)
添加以下信息
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%288%29.png)
添加额外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")
}
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%289%29.png)
3,然后打开cmd,进入项目文件夹根目录下,执行命令:gradle clean jacoco
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%2810%29.png)
等待片刻,出现success
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%2811%29.png)
4,此时在项目文件夹的\app\build\reports\jacoco\jacocoTestReport\html的目录下就能看到代码覆盖率的报告,打开index.html就能看到详细报告了:
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%2812%29.png)
到此两种方式都介绍完了,需要提的一点是,生成报告时需要打开模拟器或真机,但是使用部分真机时生成的覆盖率为0%,而用模拟器时正常,还不知道是什么原因。
一,gradle默认方式(无需手动添加jacoco插件):
1,android studio新建项目时,会自动生成androidTest文件夹,同时文件夹下生成ApplicationTest。我们先在ApplicationTest里添加一些测试代码:
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE.png)
2,Gradle默认支持生成代码覆盖率报告,我们需要做的只是在buil.gradle中设置testCoverageEnabled为true:
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%281%29.png)
3,然后打开cmd,进入项目文件夹根目录下,执行命令:gradle clean createDebugCoverageReport
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%282%29.png)
等待片刻,出现success
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%283%29.png)
4,此时在项目文件夹的\app\build\reports\coverage\debug的目录下就能看到代码覆盖率的报告,打开index.html就能看到详细报告了:
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%284%29.png)
二,手动添加jacoco插件生成
1,同上第一步,在ApplicationTest里添加一些测试代码;
2,build.gradle配置要复杂点:
添加classpath
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%285%29.png)
添加jacoco插件
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%286%29.png)
设置testCoverageEnabled为true
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%287%29.png)
添加以下信息
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%288%29.png)
添加额外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")
}
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%289%29.png)
3,然后打开cmd,进入项目文件夹根目录下,执行命令:gradle clean jacoco
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%2810%29.png)
等待片刻,出现success
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%2811%29.png)
4,此时在项目文件夹的\app\build\reports\jacoco\jacocoTestReport\html的目录下就能看到代码覆盖率的报告,打开index.html就能看到详细报告了:
![](http://ogf83mh14.bkt.clouddn.com/%E6%88%AA%E5%9B%BE%20%2812%29.png)
到此两种方式都介绍完了,需要提的一点是,生成报告时需要打开模拟器或真机,但是使用部分真机时生成的覆盖率为0%,而用模拟器时正常,还不知道是什么原因。
相关文章推荐
- Android实现IOS相机滑动控件
- Android_Intent_data_type
- Android开发中如何保证activity的生命活性!
- Android开发一些共通方法的整理
- Fragment基本解析
- 【Android开发】之Fragment重要函数讲解
- android SuppressLint解决办法
- AEScrypto WEB and ANDROID (GITHUB)
- Android源码学习之模板方法模式应用
- 常见对话框与自定义的的对话框
- Android编程中用到的activity的详细的启动模式
- Android官方开发文档Training系列课程中文版:手势处理之监测通用手势
- Android_Service(2)前台服务(service)和远程服务(service)
- Android Activity:四种启动模式,Intent Flags和任务栈
- Android学习的起步
- Android图片实现动画(解决TranslateAnimation的残影问题)
- Android Studio 设置内存大小及原理
- ViewCompat:android官方实现兼容的一个帮助类
- Fragment与Activity交互--Handler方式
- Android (非常重要)如何实现自定义的View