一、配置
1.在build.gradle中添加
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.7.5.201505241946"
}
jacoco最新的version可以到这里检查。
2.在build.gradle中设置报表生成的task
task "$coverageTaskName" (type:JacocoReport, dependsOn: "$testTaskName") {
group = "Reporting"
description = "Generate Jacoco coverage reports on the ${targetName} build."
classDirectories = fileTree(
dir: "${project.buildDir}/intermediates/classes/${sourceName}",
excludes: ['**/R.class',
'**/R$*.class',
'**/*$ViewInjector*.*',
'**/BuildConfig.*',
'**/Manifest*.*']
)
def coverageSourceDirs = [
"src/main/java",
"src/$productFlavorName/java",
"src/$buildTypeName/java"
]
additionalSourceDirs =files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")
reports {
xml.enabled = true
html.enabled = true
}
}
reports指定报表格式;
classDirectories指定class文件夹,并且可以根据pattern忽略一些class;
coverageSourceDirs 源文件目录;
二、运行
1.第一次运行jacocoTestReport,会报错/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/libinstrument.dylib which is undefined
。定位到这两个目录,发现JDK真的不完整,第二个文件果然没有。然后重现安装JDK1.7后,运行jacocoTestReport还是上面的错,但是这两个文件都存在,于是clean project后,可以正常运行了。
2.解决各种编译时错误之后,会提示在file:///Users/XX/XX/build/reports/androidTests/connected/flavors/DEV/DEV.html#s
目录下看运行Test的结果。
3.难题一:
通过adb devices
可以查询到当前是有device列表的。
这时候注意,jacoco要求Android5.0+的系统。这个问题在我不知道的时候,浪费了好多时间去解决。
难题二:
jacoco运行的结果不一定是准确的,例如:
实质上,这个Activity中是有这个控件和资源的。单独运行这个Test也是可以完全通过的。对于这个问题,我还没有找到解决办法,暂时先忽略这样的问题。