如何复制调试资产以进行单元测试

时间:2016-11-05 10:14:47

标签: android unit-testing gradle android-gradle android-library

我有一个android库gradle项目。我需要将一些文件复制到资源文件夹以进行robolectric单元测试。

要做到这一点,我已经定义了一个复制任务:

task copyDebugAssets(type: Copy)  {
    from "${projectDir}/somewhere"
    into "${buildDir}/intermediates/bundles/debug/assets"
}

但我无法将此任务添加为processDebugResources任务的依赖项:

processDebugResources.dependsOn copyDebugAssets

因为这个错误:

  

无法获取未知属性' processDebugResources'对于com.android.build.gradle.LibraryExtension类型的对象。

现在我必须在单元测试之前手动执行此任务:

./gradlew clean copyDebugAssets test

我该如何解决?

2 个答案:

答案 0 :(得分:3)

android插件动态添加了几个任务。您的.dependsOn行无效,因为在Gradle尝试处理此行时,processDebugResources任务尚未可用。一旦上游任务可用,您应该告诉gradle添加依赖项:

tasks.whenTaskAdded { task ->
  if (task.name == 'processDebugResources') {
    task.dependsOn copyDebugAssets 
  }
}

答案 1 :(得分:3)

为什么要复制?配置应从哪里提取资产:

android {
    // other cool stuff here

    sourceSets {
        androidTest {
            assets.srcDirs = ['../testAssets']
        }
    }
}

(将../testAssets替换为资产来源的路径)

我已成功使用androidTest进行仪器测试。 AFAIK,它应该适用于test或任何其他来源集。