2016-11-05 21 views
8

Bir android kitaplık taslak projem var. Ve bazı dosyaları robolectric birim testleri için varlıklar klasörüne kopyalamam gerekiyor.Birim testleri için hata ayıklama öğeleri nasıl kopyalanır

Ben tanımladığınız bir kopyası görevi yapmak için:

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

ama processDebugResources görev için bir bağımlılık olarak bu görevi ekleyemezsiniz çünkü: Bu hatanın

processDebugResources.dependsOn copyDebugAssets 

:

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

Şimdi manuel ünite testinden önce bu görevi yürütmek zorunda:

./gradlew clean copyDebugAssets test 

Bunu nasıl çözebilirim?

cevap

3

Android eklentisi çeşitli görevleri dinamik olarak ekler. .dependsOn hattınız işe yaramıyor çünkü zaman çizelgesi bu satırı işlemeye çalışırken, processDebugResources görevi henüz mevcut değil. Taşımacılık görevinin yapılacağı anda bağımlılığı eklemesi gerektiğini bildirmelisiniz:

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

Çok teşekkürler, işe yarıyor! Ne düşünüyorsunuz, varlıkları özel görevle kopyalamak için doğru bir yol mu, yoksa belki başka bir yaklaşımı seçebilir miyim? – g4s8

+1

@commonsware ile aynı fikirdeyim, varlıklarınızın olduğu yere işaret etmek için proje kurulumunuzu değiştirerek kopyalamadan daha iyidir. – RaGe

3

Neden kopyalama?

android { 
    // other cool stuff here 

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

Ben enstrümantasyon testi için androidTest ile bu başarıyla kullanmış

(varlıklar gelmelidir yere bir yol ile ../testAssets değiştirme): varlıklar çekilmiş olması gereken yerde yapılandırın. AFAIK, test veya başka bir kaynak kümesi için çalışmalıdır.

+0

Yanıt verdiğiniz için teşekkür ederiz! Yapılandırmayı denedim, ama başarılı değildi. Robolectric'in AssetManager'ı, varlıkları './build/intermediates/bundles/ /assets' öğesinden yüklemeyi deneyin, ancak bu klasör her zaman boştur. – g4s8

İlgili konular