2014-07-08 20 views
12

Nelle prove robolectric sto provando a leggere un file. Dato che questo file contiene solo i dati di test, l'ho messo nelle risorse dei test.Utilizzo delle risorse nei test robolectric

La struttura della directory si presenta così.
src/main/assets/prod_data_file
src/test/assets/test_data_file

Tuttavia quando provo a leggere il file getShadowApplication().getAssets().open(MY_FILE_PATH) mi dà FileNotFoundException.

Qualcuno sa come risolvere questo problema?

+0

Devi mettere il tuo file nella cartella delle risorse. Quindi usa il nome del file per 'InputStream is = getResources(). GetAssets(). Open (filename);'. – greenapps

+1

beni nella directory test? o risorse nella directory dell'app? – ankitrokdeonsns

+0

Hmmm? Scusa se non conosco nessuna directory di test in un ambiente Eclipse. Neanche io sono a conoscenza di una directory app. Ment era la directory dei beni del progetto. – greenapps

risposta

13

Poiché i miei test sono solo la lettura di questi file e la restituzione dei dati di file come String sono riuscito a farlo tramite getClass().getClassLoader().getResourceAsStream(MY_FILE_PATH) e quindi ho letto il file. Non ho davvero bisogno di leggere per usare getShadowApplication().getAssets().open(MY_FILE_PATH).

Ho appena spostato i miei file di dati di test su src/test/resources e ha funzionato. :)

+0

Il motivo, il motivo per cui si è verificato questo errore è che le attività di test (non l'AndroidTest) vengono utilizzate per i test delle unità, e nessuna attività viene copiata per queste attività (a partire da maggio 2015). Quindi, anche se AS mette bene in risalto la cartella delle risorse in 'src/test', non ha alcuna rilevanza. Nessun APK è costruito, quindi di solito non dovresti essere in grado di accedere alle risorse, solo che robolectric ti dà ora la possibilità di farlo. –

+0

Grazie mi ha salvato un giorno –

+0

Grande, grazie! In questo modo i file vengono esclusi dall'apk di rilascio o dal file aar. –

0

sono stato in grado di fare in questo modo:

1) Copia (o creare) AndroidManifest.xml nella cartella di prova

2) Aggiungere @Config(emulateSdk = 18, manifest = "src/test/AndroidManifest.xml") per questa specifica prova

ero in grado di leggi il file. Quindi significa che si potrebbe giocare con AndroidManifest classe e il secondo classificato personalizzati (più ispirazione qui https://groups.google.com/forum/#!topic/robolectric/YvbdqRFcdnA)

penso che potrebbe essere anche possibile giocare con build.gradle:

android { 
    sourceSets { 
    androidTest.setRoot('src/test') 

    androidTest { 
     assets.srcDir file('src/test/assets') 
    } 
    } 
} 

ma non sono sicuro dal plug doesn creare qualsiasi variante di build ma solo attività.

Problemi correlati