8

У меня есть проект градиента библиотеки андроидов. И мне нужно скопировать некоторые файлы в папку с данными для тестов на модулях robolectric.Как скопировать активы отладки для модульных тестов

Для этого я определил задачу копирования:

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

, но я не могу добавить эту задачу в качестве зависимости для processDebugResources задачи:

processDebugResources.dependsOn copyDebugAssets 

из-за этой ошибки:

Could not get unknown property 'processDebugResources' for object of type com.android.build.gradle.LibraryExtension.

Теперь я должен выполнить эту задачу вручную перед модульным тестом:

./gradlew clean copyDebugAssets test 

Как это можно решить?

ответ

3

Плагин android добавляет несколько задач динамически. Строка .dependsOn не работает, потому что в то время, когда град пытается обработать эту строку, задача processDebugResources еще недоступна. Вы должны указать gradle, чтобы добавить зависимость, как только будет поставлена ​​задача восходящего потока:

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

Большое спасибо, это работает! Как вы думаете, правильно ли он копирует активы с пользовательской задачей или, может быть, я выбираю другой подход? – g4s8

+1

Я согласен с @commonsware, изменяя настройку вашего проекта, чтобы указать, где вы располагаете, лучше, чем копирование. – RaGe

3

Зачем копировать? Настройка, где активы должны быть выведены из:

android { 
    // other cool stuff here 

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

(замена ../testAssets с пути, где активы должны исходить от)

я это успешно используется с androidTest для испытаний приборов. AFAIK, он должен работать для test или любого другого источника.

+0

Спасибо, что ответили! Я пробовал ваш конфиг, но он не увенчался успехом. «AssetManager» Robolectric пытается загрузить активы из './build/intermediates/bundles/ /assets', однако эта папка всегда пуста. – g4s8

Смежные вопросы