在基于Android Gradle的项目中设置集成测试

Héc*_*tor 10 android gradle

我正在按照教程将集成测试环境添加到我的Android项目中.我有创建src/integrationTest/javasrc/integrationTest/resourcesdirs然后我已经添加到我的build.gradle:

sourceSets {
    integrationTest {
        java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integrationTest/java')
        }
        resources.srcDir file('src/integrationTest/resources')
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我同步Gradle文件时,我收到此错误:

错误:(134,0)没有这样的属性:main for class:org.gradle.api.internal.file.DefaultSourceDirectorySet可能的解决方案:name

这是什么意思?我该如何解决?

谢谢

编辑

我刚刚尝试过,android.sourceSets.main.outputandroid.sourceSets.test.output不是 main.outputtest.output,分别:

sourceSets {
    integrationTest {
        java {
            compileClasspath += android.sourceSets.main.output + android.sourceSets.test.output
            runtimeClasspath += android.sourceSets.main.output + android.sourceSets.test.output
            srcDir file('src/integrationTest/java')
        }
        resources.srcDir file('src/integrationTest/resources')
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我收到这个错误:

错误:(136,0)无法在源集main上找到属性'output'.

Héc*_*tor 6

解决了!实际上,这些行不必在源集配置中,而是在运行集成测试的任务中.现在,我build.gradle看起来像:

    sourceSets {
        integrationTest {
            java.srcDir file('src/integrationTest/java')
            resources.srcDir file('src/integrationTest/resources')
        }
    }

    configurations {
        integrationTestCompile.extendsFrom testCompile
    }

    task integrationTest(type: Test) {
        testClassesDir = sourceSets.integrationTest.output.classesDir
        classpath = sourceSets.integrationTest.runtimeClasspath
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果我在我的Android库模块中使用它,我得到:`无法获取SourceSet容器的未知属性'integrationTest'.当我更改为`android.sourceSets.integrationTest`时,我得到:`无法获取未知属性'输出'用于com.android.build.gradle.internal.api.DefaultAndroidSourceSet类型的源集合集成测试. (9认同)