运行 Android 通过 Gradle 命令测试代码覆盖率
Running Android Tests with code coverage through Gradle command
在不使用 JaCoCo 的情况下,有没有办法通过 Gradle 命令对我的测试进行 运行 代码覆盖?似乎没有 Gradle 任务可以覆盖 运行s 进行测试。我看到的唯一选项是 Android Studio UI 上的一个按钮,它将 运行 我的代码覆盖率测试。
理想情况下,我想使用命令行中的代码覆盖率自动执行测试并访问它生成的报告。
顺便说一下,我对 JaCoCo 没有任何异议。我只是想知道是否有一种方法可以不使用库来做到这一点。
编辑:Possibly related but didn't the solution did not work for me - testDebug 对我来说不是任务。
编辑 2:Google Issue Tracker 这似乎与我的问题有关。一年多前开业。
编辑 3:似乎在尝试使用 Jacoco 时这也是一个问题...似乎没有 gradle jacoco 提供的任务在 src/test 中进行单元测试我的研究目录。很想被证明是错误的!
在对 Gradle 的工作原理进行了大量研究之后,我能够解决我的问题,这要归功于一些示例,例如 here and from this github project here。我需要做一些调整才能让它与我的项目一起工作,但结果是我可以 运行 代码覆盖范围只是我在命令行的 src/test/ 目录中找到的单元测试,并访问那些生成的报告。
这是我的 build.gradle 中的任务:
task jacocoReport(type: JacocoReport, dependsOn: 'testMockDebugUnitTest') {
group = 'Reporting'
description = 'Generate Jacoco coverage reports after running tests.'
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: 'build/intermediates/classes/test/mock/debug',
excludes: [
'**/R*.class',
'**/BuildConfig*'
]
)
sourceDirectories = files('src/main/java')
executionData = files('build/jacoco/testMockDebugUnitTest.exec')
doFirst {
files('build/intermediates/classes/test/mock/debug').getFiles().each { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
我需要进行的更改:运行 我的单元测试单独由 gradle 任务 testMockDebugUnitTest
完成,jacocoReport
任务需要依赖我的首先完成单元测试。为我生成的构建树有点不同,所以我硬编码了它。Jacoco 依赖的执行数据在 testMockDebugUnitTest
任务生成的 .exec 文件中找到,该文件也需要定义。
总而言之,我现在可以通过命令行获取我的单元测试与仪器测试分开的代码覆盖率。
在不使用 JaCoCo 的情况下,有没有办法通过 Gradle 命令对我的测试进行 运行 代码覆盖?似乎没有 Gradle 任务可以覆盖 运行s 进行测试。我看到的唯一选项是 Android Studio UI 上的一个按钮,它将 运行 我的代码覆盖率测试。
理想情况下,我想使用命令行中的代码覆盖率自动执行测试并访问它生成的报告。
顺便说一下,我对 JaCoCo 没有任何异议。我只是想知道是否有一种方法可以不使用库来做到这一点。
编辑:Possibly related but didn't the solution did not work for me - testDebug 对我来说不是任务。
编辑 2:Google Issue Tracker 这似乎与我的问题有关。一年多前开业。
编辑 3:似乎在尝试使用 Jacoco 时这也是一个问题...似乎没有 gradle jacoco 提供的任务在 src/test 中进行单元测试我的研究目录。很想被证明是错误的!
在对 Gradle 的工作原理进行了大量研究之后,我能够解决我的问题,这要归功于一些示例,例如 here and from this github project here。我需要做一些调整才能让它与我的项目一起工作,但结果是我可以 运行 代码覆盖范围只是我在命令行的 src/test/ 目录中找到的单元测试,并访问那些生成的报告。
这是我的 build.gradle 中的任务:
task jacocoReport(type: JacocoReport, dependsOn: 'testMockDebugUnitTest') {
group = 'Reporting'
description = 'Generate Jacoco coverage reports after running tests.'
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: 'build/intermediates/classes/test/mock/debug',
excludes: [
'**/R*.class',
'**/BuildConfig*'
]
)
sourceDirectories = files('src/main/java')
executionData = files('build/jacoco/testMockDebugUnitTest.exec')
doFirst {
files('build/intermediates/classes/test/mock/debug').getFiles().each { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
我需要进行的更改:运行 我的单元测试单独由 gradle 任务 testMockDebugUnitTest
完成,jacocoReport
任务需要依赖我的首先完成单元测试。为我生成的构建树有点不同,所以我硬编码了它。Jacoco 依赖的执行数据在 testMockDebugUnitTest
任务生成的 .exec 文件中找到,该文件也需要定义。
总而言之,我现在可以通过命令行获取我的单元测试与仪器测试分开的代码覆盖率。