为其他模块

时间:2017-03-27 23:10:03

标签: gradle code-coverage android-espresso jacoco

我的项目结构如下::app:core:app是Android应用程序项目,它依赖于具有所有业务逻辑的:core

我对Espresso进行了:app次测试,由于所有问题和指南,我能够运行并获得报道。但覆盖范围仅适用于:app中的代码。

如何覆盖:app项目测试产生的所有项目(:coreEspresso)?这甚至可能吗?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

即使您在问题中未提及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根项目中定义此任务,并链接到子项目的文件和任务。

自定义Jacoco报告任务有an example,即使它旨在为多个测试类型创建统一报告,也可以针对此多项目问题进行转换。

答案 1 :(得分:1)

默认情况下,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 {
    additionalSourceDirs = project(':core').sourceSets.main.allJava
}