Android CodeCov/Jacoco 图书馆模块
Android CodeCov/Jacoco for Library Module
我正在尝试按照此处所述实施 CodeCov/Jacoco:
本指南非常适用于主应用模块,在应用级别 build.gradle 中用 'com.android.application 指定。
但是,我有一个名为 video_library 的第二个库模块,它被指定为在其 build.gradle 上带有 'com.android.library' 的库。
每当我尝试 运行 video_library 模块的 Jacoco 任务时,任务 运行 但它无法 运行 我编写的任何单元测试,好像找不到任何测试(虽然这个模块有 50 多个)
项目结构如下:
├── app
│ ├── build
│ └── src
├── build
│ └── kotlin
├── gradle
│ └── wrapper
└── library_video
├── build
├── sampledata
└── src
我已经以与应用程序模块相同的方式实现了 jacocoTestReport:
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-kapt'
id 'org.jetbrains.dokka'
id 'maven-publish'
id 'jacoco'
}
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.enabled = true
html.enabled = true
}
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/java"
sourceDirectories.setFrom(files([mainSrc]))
classDirectories.setFrom(files([debugTree]))
executionData.setFrom(fileTree(dir: "$buildDir", includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
]))
}
我是否需要对 library_video 模块实现进行调整才能找到测试?
您需要在 :app
模块中手动包含 classDirectories
library_video
类。这至少是帮助我实现多模块代码覆盖的原因。
在 :app
模块中(我使用 Gradle KTS,因此在 Kotlin 中):
val library_video_dir = fileTree(mapOf("dir" to "${buildDir}/../../library_video/build/classes/kotlin/main", "excludes" to fileFilter))
classDirectories.setFrom(files(listOf(debugTree, library_video_dir)))
尝试使用 dir
路径进行试验,因为它与 Java
不同
我正在尝试按照此处所述实施 CodeCov/Jacoco:
本指南非常适用于主应用模块,在应用级别 build.gradle 中用 'com.android.application 指定。
但是,我有一个名为 video_library 的第二个库模块,它被指定为在其 build.gradle 上带有 'com.android.library' 的库。
每当我尝试 运行 video_library 模块的 Jacoco 任务时,任务 运行 但它无法 运行 我编写的任何单元测试,好像找不到任何测试(虽然这个模块有 50 多个)
项目结构如下:
├── app
│ ├── build
│ └── src
├── build
│ └── kotlin
├── gradle
│ └── wrapper
└── library_video
├── build
├── sampledata
└── src
我已经以与应用程序模块相同的方式实现了 jacocoTestReport:
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-kapt'
id 'org.jetbrains.dokka'
id 'maven-publish'
id 'jacoco'
}
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.enabled = true
html.enabled = true
}
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/java"
sourceDirectories.setFrom(files([mainSrc]))
classDirectories.setFrom(files([debugTree]))
executionData.setFrom(fileTree(dir: "$buildDir", includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
]))
}
我是否需要对 library_video 模块实现进行调整才能找到测试?
您需要在 :app
模块中手动包含 classDirectories
library_video
类。这至少是帮助我实现多模块代码覆盖的原因。
在 :app
模块中(我使用 Gradle KTS,因此在 Kotlin 中):
val library_video_dir = fileTree(mapOf("dir" to "${buildDir}/../../library_video/build/classes/kotlin/main", "excludes" to fileFilter))
classDirectories.setFrom(files(listOf(debugTree, library_video_dir)))
尝试使用 dir
路径进行试验,因为它与 Java