2014-05-13 3 views
9

Sto scrivendo i miei test di unità utilizzando gradle in Android Studio. Ho le prove situate in:Android gradle src/androidTest/res/layout/mylayout.xml non trovato in mypackage.R

src/androidTest/java

Questo funziona bene. Ora nel mio test voglio accedere a una risorsa che è definita in:

src/androidTest/res

In particolare, voglio ottenere src/androidTest/res/layout/mylayout.xml. Il problema è la classe R per il mio pacchetto di test o qualsiasi pacchetto per questo ha definito mylayout.

Ho fatto questo sul mio build.gradle e non ha fatto la differenza:

sourceSets { 
    androidTest.resources.srcDirs = ['src/res'] 
} 

Come faccio fornisco le risorse per le classi androidTest che è visibile solo al androidTest?

+0

Perché avete bisogno di avere le risorse disponibili solo per il test? – helleye

+3

Quando si scrivono test specifici per i protocolli di rete, è necessario un insieme definito di dati di esempio che funzioneranno e campioni di dati che non funzioneranno. Sarebbe ridicolo includere tali risorse nell'app in quanto non hanno altro scopo se non quello di testare. – vangorra

risposta

1

Ho trovato la soluzione, aggiungila al file build.gradle.

sourceSets { 
    androidTest { 
     java.srcDirs = ['src/androidTest/src'] 
     resources.srcDirs = ['src/androidTest/src'] 
    } 
} 
+0

Non funziona per me ... puoi approfondire un po '? –

+1

Non riesco a far funzionare anche questo per me. Attualmente utilizza 'com.android.tools.build:gradle:0.13.+' con Gradle 2.1 installato. Modificato leggermente i percorsi su 'src/androidTest/java' e 'src/androidTest/res'. Per la sintassi, sembra che dovrebbe funzionare. È interessante notare che posso vedere che i file di risorse intermedie (pre-unione) vengono generati per i layout nelle mie cartelle di test. Chiunque funziona? Per favore? :-) –

+0

Vergogna. Ricevo di nuovo lo stesso errore e questo non funziona più. – vangorra

8

Per me, la soluzione era quella di mettere i file sorgenti in src/androidTest/java e i file di risorse in src/androidTest/res. Queste sono le posizioni standard, quindi non è necessario modificare nulla in gradle.build.

Inoltre, rinominare la R importazione da

import com.mycompany.myappname.R; 

a

import com.mycompany.myappname.test.R; 

Fonte: Configuring res srcDirs for androidTest sourceSet

+2

Questo mi ha aiutato, anche se non è possibile importare contemporaneamente sia il test che la normale classe "R". Dato che volevo utilizzare i miei id delle risorse app anche nei miei test, dovevo fare riferimento al file "R" dell'app di test utilizzando il nome completo della classe, ovvero 'int someId = com.mycompany.myappname.test.R.raw .some_raw_resource; ' –

Problemi correlati