Android Jacoco多模块单元测试覆盖率
Android 默认配置了单元测试和集成测试的任务,Run test on build variant:
#本地测试:testXxxUnitTest
./gradlew biz_a:testDebugUnitTest
#设备测试:connectedXxxAndroidTest
./gradlew biz_a:connectedDebugAndroidTest
本文只统计单元测试的覆盖率,只依赖testXxxUnitTest任务。
配置
def jacocoFileFilter = [
//Android stuff
'**/R.class',
'**/BR.class',
'**/R$*.class',
'**/BR$*.class',
'**/BuildConfig.*',
'android/**/*.*',
'**/immersionbar/*.*',
'**/statusbar/*.*',
'**/widget/*.*',
'**/log/impl/*.*',
'**/log/upload/*.*',
'**/TSpanView.java',
'android/**/*.*',
//Data Binding
'**/*databinding',
'**/*binders',
'**/*layouts',
'**/Manifest*.*',
//Test mocks
'**/*Mock.*',
//'**/*Test*.*',
//Data classes (without any logic)
"**/services/**/model/**",
'**/*$$ViewBinder*.*',
'**/inject/*',
'**/*$InjectAdapter.*',
'**/Dagger*.*',
'**/*$ModuleAdapter.class',
'**/*$ViewInjector*.class'
]
app level
apply plugin: 'jacoco'
// build type 配置
jacoco {
toolVersion "0.8.5"
}
android {
testBuildType "debug"
buildTypes {
// This is a new build type specifically for automation test
// run like `test Id Internal AutomationTest UnitTest` for unit test
debug {
testCoverageEnabled = true // !!!
}
}
testOptions {
unitTests.returnDefaultValues = true
animationsDisabled true
}
}
// 模块配置
def jacocoModules = [
'app', 'biz_a', 'biz_b', 'biz_c', 'biz_d',
]
def jacocoFileFilter = [...]
//debug: To support Java coverage on Unit tests
def jacocoClassDirectories = files(jacocoModules.collect {
'app' == it ?
fileTree(dir: "${buildDir}/intermediates/javac/debug/classes", excludes: jacocoFileFilter) :
fileTree(dir: "../${it}/build/intermediates/javac/debug/classes", excludes: jacocoFileFilter)
})
def jacocoSourceDirectories = files(jacocoModules.collect {
'app' == it ?
"${project.projectDir}/src/main/java" :
"../${it}/src/main/java"
})
def jacocoExecList = files(
fileTree(dir: "${buildDir}/outputs/code-coverage/debugAndroidTest/connected/", includes: ["*.ec"]),
jacocoModules.collect {
'app' == it ?
"${buildDir}/jacoco/testDebugUnitTest.exec" : // app
"../${it}/build/jacoco/testDebugUnitTest.exec"
}
)
// :app Unit Test Coverage
task createUnitTestReport(
type: JacocoReport,
dependsOn: [':app:testDebugUnitTest']
) {
group = "JacocoReport"
reports {
xml.enabled = true
html.enabled = true
}
getSourceDirectories().setFrom(files(
"${project.projectDir}/src/main/java" , // mainSrc
"${project.projectDir}/src/debug/java", // debugSrc
))
getClassDirectories().setFrom(files(
fileTree(dir: "${buildDir}/intermediates/javac/debug/classes", excludes: jacocoFileFilter), // java debugTree
// fileTree(dir: "${buildDir}/tmp/kotlin-classes/automationTest", excludes: fileFilter), // kotlinDebugTree
))
getExecutionData().setFrom(files(
"${buildDir}/jacoco/testDebugUnitTest.exec",
fileTree(dir: "${buildDir}/outputs/code-coverage/debugAndroidTest/connected/", includes: ["*.ec"]) // appAndroidTests
))
}
//Global Test Coverage,整合app和所有子模块的单元测试报告生成一个总的覆盖率报告
task createGlobalTestReport(
type: JacocoReport,
dependsOn: jacocoModules.collect {
":${it}:createUnitTestReport"
}
) {
group = "JacocoReport"
reports {
xml.enabled = true
html.enabled = true
}
getSourceDirectories().setFrom jacocoSourceDirectories
getClassDirectories().setFrom jacocoClassDirectories
getExecutionData().setFrom jacocoExecList
}
module level
apply plugin: 'jacoco'
// TEST COVERAGE
jacoco {
toolVersion "0.8.5"
}
android {
// This is a new build type specifically for test
testBuildType "debug"
buildTypes {
debug {
testCoverageEnabled = true // !!!
}
}
testOptions {
unitTests.returnDefaultValues = true
animationsDisabled true
}
}
// module level Unit Test Coverage
task createUnitTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
reports {
html.enabled = true
}
def jacocoFileFilter = [...]
getSourceDirectories().setFrom(files(
"${project.projectDir}/src/main/java", // mainSrc
"${project.projectDir}/src/debug/java", // debugSrc
))
getClassDirectories().setFrom(files(
fileTree(dir: "${buildDir}/intermediates/javac/debug/classes", excludes: jacocoFileFilter), // java debugTree
// fileTree(dir: "${buildDir}/tmp/kotlin-classes/automationTest", excludes: fileFilter), // kotlinDebugTree
))
getExecutionData().setFrom(files(
"${buildDir}/jacoco/testDebugUnitTest.exec",
))
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhejcge
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22