【问题标题】:Generate coverage for other modules为其他模块生成覆盖率
【发布时间】:2017-03-27 23:10:02
【问题描述】:
我的项目结构如下::app,:core。 :app是Android应用项目,依赖:core,拥有全部业务逻辑。
我对@987654326@ 进行了Espresso 测试,感谢所有问题和指南,我能够运行并获得覆盖率报告。但覆盖范围仅适用于:app 中的代码。
如何覆盖我的 Espresso 仪器测试产生的所有项目(:app 和 :core)?这甚至可能吗?
非常感谢任何帮助。
【问题讨论】:
标签:
gradle
code-coverage
android-espresso
jacoco
【解决方案1】:
即使您在问题中没有提到 Jacoco,它也会列在标签中,因此我假设您想使用它来创建覆盖率报告。 Gradle Jacoco 插件 (apply plugin: 'jacoco') 允许您创建 JacocoReport 类型的自定义任务。
定义这样一个任务,你可以指定源和类目录以及执行数据:
task jacocoTestReport(type: JacocoReport) {
dependsOn // all your test tasks
reports {
xml.enabled = true
html.enabled = true
}
sourceDirectories = // files() or fileTree() to your source files
classDirectories = // files() or fileTree() to your class files
executionData = // files() or fileTree() including all your test results
}
对于 Espresso 测试,执行数据应包括所有生成的 .ec 文件。您可以在 Gradle 根项目中定义此任务,并链接到子项目的文件和任务。
有an example用于自定义Jacoco报告任务,即使它旨在为多种测试类型创建统一报告,也可以针对这种多项目问题转移。
【解决方案2】:
默认情况下,JacocoReport 任务仅报告项目内源的覆盖率。您需要在JacocoReport 任务上设置additionalSourceDirs 属性。
app/build.gradle
apply plugin: 'java'
apply plugin: 'jacoco'
// tell gradle that :core must be evaluated before :app (so the sourceSets are configured)
evaluationDependsOn(':core')
jacocoTestReport {
def coreSourceSet = project(':core').sourceSets.main
additionalSourceDirs.from coreSourceSet.allJava
additionalClassDirs.from coreSourceSet.output
}