2016-11-05 17 views
8

Mam projekt gradacji biblioteki Android. I muszę skopiować niektóre pliki do folderu zasobów na testy jednostek robolektrycznych.Jak kopiować zasoby debugowania dla testów jednostkowych

Aby to zrobić Mam zdefiniowane zadanie kopiowania:

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

ale nie mogę dodać to zadanie jako zależność dla processDebugResources zadania:

processDebugResources.dependsOn copyDebugAssets 

powodu tego błędu:

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

Teraz muszę ręcznie wykonać to zadanie przed testem jednostki:

./gradlew clean copyDebugAssets test 

Jak mogę to rozwiązać?

Odpowiedz

3

Dodatek Android dodaje kilka zadań dynamicznie. Twoja linia .dependsOn nie działa, ponieważ w tym czasie próbujemy przetworzyć tę linię, zadanie processDebugResources jest jeszcze dostępne. Należy poinformować Gradle dodać zależność, jak tylko przed zadaniem jest dostępny:

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

Wielkie dzięki, to działa! Jak myślisz, czy jest to właściwy sposób kopiowania zasobów przy użyciu niestandardowego zadania, czy może powinienem wybrać inne podejście? – g4s8

+1

Zgadzam się z @commonsware, zmiana konfiguracji projektu tak, aby wskazywała na to, gdzie są twoje aktywa, jest lepsza niż kopiowanie. – RaGe

3

Dlaczego kopię? Skonfigurować gdzie aktywa powinny być pobierane z:

android { 
    // other cool stuff here 

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

(zastępując ../testAssets ze ścieżką do miejsca, gdzie aktywa powinny pochodzić z)

Użyłem tego z powodzeniem androidTest do testów oprzyrządowania. AFAIK, powinno działać dla test lub dowolnego innego zestawu źródeł.

+0

Dzięki za odpowiedź! Próbowałem twojej konfiguracji, ale to się nie udało. Robolectric 'AssetManager' próbuje załadować zasoby z' ./build/intermediates/bundles/ /assets', jednak ten folder jest zawsze pusty. – g4s8

Powiązane problemy