2015-08-24 18 views
25

Ich habe die folgende Ordnerstruktur im Android Studio:Android Test roh Ressource

├── androidTest 
│   ├── java 
│   └── res 
│    └── raw 
│     └── test_file 
└── main 
    ├── java 
    └── res 
     └── raw 
     └── app_file 

Ich versuche, die test_file Ressource zuzugreifen, die im rohen Ordner der androidTest Elemente vorhanden ist. Hier ist der Code in einem Robotium Testfall, der von ActivityInstrumentationTestCase2 erbt:

InputStream is = this.getInstrumentation() 
       .getContext() 
       .getResources() 
       .openRawResource(R.raw.test_file); 

Android Studio wirft einen Referenzfehler, da die Ressource nicht gefunden werden kann. Der genaue Fehler ist "Kann Symbol test_file nicht auflösen".

Wie kann ich auf diese Ressource einen Testfall verweisen, der auf dem androidTest-Ressourcenpaket existiert?

+0

Hatten Sie ein Werkzeug, das den Baum für Sie generieren würde? –

+0

Ja, das bash 'Baum' Werkzeug – jlhonora

+0

Danke schön für den Tipp –

Antwort

32

Standardmäßig enthält Ihr AndroidTest-Projekt die R-Klasse Ihrer App, aber die Ressourcen von androidTest werden in einer separaten Datei generiert. Stellen Sie sicher, dass Sie die R-Klasse von Ihrem Testprojekt importieren:

import com.your.package.test.R; 

[..] 

getInstrumentation().getContext().getResources().openRawResource(R.raw.test_file); 

Sie können auch direkt das Testprojekt der R-Klasse Referenz:

getInstrumentation().getContext().getResources().openRawResource(com.your.package.test.R.raw.test_file); 
+3

Ich habe die gleiche Dateistruktur wie das OP, aber 'rohe' wird nicht für' androidTest' Variante generiert. –

+0

@YaroslavMytkalyk welche Art von Datei setzen Sie in den rohen Ordner? – jlhonora

+0

@jlhonora eine Binärdatei ohne Erweiterung. Versuchte es umzubenennen und fügte irgendeine willkürliche Erweiterung hinzu, die nichts änderte. –

9

Ich hatte die androidTest Ressourcen an der richtigen Stelle (src/androidTest/res) und Ich konnte sie immer noch nicht über <normal.package>.test.R erreichen. Ich verbrachte viel Zeit googeln zu versuchen, herauszufinden, was los war ..

Ich stolperte endlich auf die Antwort. Wenn Sie eine buildType erstellen, wo Sie eine applicationIdSuffix angegeben haben, sind Ihre Dateien unter <applicationId><applicationIdSuffix>.test.R !!!!

heißt

applicationId "com.example.my.app" 

buildTypes { 
    debug { 
     applicationIdSuffix ".debug" 
    } 
} 

, wenn Sie Ressourcen im richtigen Verzeichnis androidTest haben, dann können Sie sie nur über com.example.my.app.debug.test.R zugreifen !!!!