2014-07-08 7 views
12

In meinen robolectric Tests versuche ich eine Datei zu lesen. Da diese Datei nur die Testdaten enthält, habe ich sie in Assets der Tests abgelegt.Verwenden von Assets in Roboelektrik-Tests

Die Verzeichnisstruktur sieht so aus.
src/main/assets/prod_data_file
src/test/assets/test_data_file

aber wenn ich versuche, die Datei von getShadowApplication().getAssets().open(MY_FILE_PATH) zu lesen gibt es mir FileNotFoundException.

Weiß jemand, wie man das repariert?

+0

Sie müssen Ihre Datei im Ordner Assets ablegen. Danach verwenden Sie den Dateinamen für 'InputStream is = getResources(). GetAssets(). Open (Dateiname);'. – greenapps

+1

Assets im Testverzeichnis? oder Assets im App-Verzeichnis? – ankitrokdeonsns

+0

Hmmm? Leider kenne ich kein Testverzeichnis in einer Eclipse-Umgebung. Ich kenne auch kein App-Verzeichnis. Ment war das Anlagenverzeichnis des Projekts. – greenapps

Antwort

13

Da meine Tests gerade diese Dateien lesen und Dateidaten als String zurückgeben, konnte ich das über getClass().getClassLoader().getResourceAsStream(MY_FILE_PATH) tun und dann Datei lesen. Muss nicht wirklich gelesen werden, um getShadowApplication().getAssets().open(MY_FILE_PATH) zu verwenden.

Ich habe gerade meine Testdateien nach src/test/resources verschoben und es funktionierte. :)

+0

Der Grund, warum Sie diesen Fehler bekommen haben ist, dass die Testaufgaben (nicht der androidTest) für Unit Tests verwendet werden, und überhaupt keine Assets für diese Aufgaben kopiert werden (Stand Mai) 2015). Auch wenn AS den Ordner "src/test" gut hervorhebt, hat er keinerlei Relevanz. Es wird kein APK erstellt, daher sollten Sie normalerweise nicht auf Assets zugreifen können, nur dass Ihnen robolectric jetzt die Möglichkeit gibt, dies zu tun. –

+0

Dank es rettete mir einen Tag –

+0

Großartig, danke! Auf diese Weise werden Dateien von Release-APK- oder AAR-Dateien ausgeschlossen. –

0

konnte ich es so machen:

1) Kopie (oder erstellen) AndroidManifest.xml in Testordner

2) In @Config(emulateSdk = 18, manifest = "src/test/AndroidManifest.xml") für diesen speziellen Test

konnte ich Datei lesen So ist es bedeutet, dass Sie mit AndroidManifest Klasse und individuelle Läufer (mehr Inspiration hier https://groups.google.com/forum/#!topic/robolectric/YvbdqRFcdnA)

Ich denke, spielen könnte es auch möglich sein könnte, mit build.gradle zu spielen:

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

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

aber ich bin nicht sicher, da Plugin doesn Erstellen Sie keine Build-Variante, sondern nur Aufgaben.

Verwandte Themen