运行单元测试时没有可用资源

时间:2014-12-12 13:43:56

标签: android gradle android-studio

Android Studio中有一个known bug,其中应用程序的资源不在测试类中。

根据上述线程的解决方案是将以下行放入build.gradle:

task copyTestResources(type: Copy) {
    from "${projectDir}/src/test/resources"
    into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources

但格拉德说:

Error:(132, 0) Could not find property 'processTestResources' on project ':app'.

我到底要把这行放在哪里

processTestResources.dependsOn copyTestResources

在我的build.gradle中?

编辑:

我的构建文件中还没有apply plugin: 'java'。问题是在我的app模块的构建gradle中,我已经有apply plugin: 'android'并试图添加java插件导致

Error:The 'java' plugin has been applied, but it is not compatible with the Android plugins.

我在顶级构建文件中尝试了puttin apply plugin: 'java',然后

task copyTestResources(type: Copy) {
    from "${projectDir}/app/src/test/resources"
    into "${buildDir}/classes/test"
}

请注意,我将modules目录添加到了from-line。这构建很好,但是需要访问资源的单元测试仍然无法正常工作。

2 个答案:

答案 0 :(得分:3)

我不知道您使用的是android插件,抱歉。您收到错误是因为Android插件defines a different set of build tasks与Java插件相比。因此,您需要选择不同的构建任务来依赖copyTestResources任务,例如:

apply plugin: 'android'

// (...) more build logic

task copyTestResources() {
    from "${projectDir}/src/test/resources"
    into "${buildDir}/classes/test"
}
check.dependsOn copyTestResources

此外,您的copyTestResources任务可能会更简单:

task copyTestResources() {
    from sourceSets.test.resources
    into sourceSets.test.output.classesDir
}

答案 1 :(得分:0)

有一个很好的解决方法来实现这个: https://github.com/nenick/AndroidStudioAndRobolectric/blob/master/app/build.workaround-missing-resource.gradle

有了这个,您可以放弃额外的任务,只需添加" .gradle"我链接的文件并将其应用于您的模块 build.gradle

apply from: 'build.workaround-missing-resource.gradle'

确保将您的资源放入 app / test / resources / ,并仅通过其姓名引用它们。

例如:this.getClass().getClassLoader().getResource("my-asset-file.json")

我在您链接的票证中找到了解决方案: https://code.google.com/p/android/issues/detail?id=64887