Android test raw resource
Solution 1
By default your androidTest project will include your app's R class, but androidTest's resources will be generated into a separate file. Make sure you import the R class from your test project:
import com.your.package.test.R;
[..]
getInstrumentation().getContext().getResources().openRawResource(R.raw.test_file);
You can also directly reference the test project's R class:
getInstrumentation().getContext().getResources().openRawResource(com.your.package.test.R.raw.test_file);
Solution 2
I had the androidTest
resources in the right spot (src/androidTest/res
) and I still couldn't access them via <normal.package>.test.R
. I spent a lot of time googling trying to figure out what was going on..
I FINALLY stumbled onto the answer. If you're building a buildType
where you specified an applicationIdSuffix
, your files are at <applicationId><applicationIdSuffix>.test.R
!!!!
i.e.
applicationId "com.example.my.app"
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
if you have androidTest resources in the right directory, then you can only access them via com.example.my.app.debug.test.R
!!!!
Solution 3
See Android Unit Tests Requiring Context. For instrumentation test use InstrumentationRegistry.getInstrumentation().getTargetContext()
(in Kotlin: getInstrumentation().targetContext
). Then you can access resources
. You won't need to import R
file.
jlhonora
Updated on June 23, 2022Comments
-
jlhonora about 2 years
I have the following folder structure in Android Studio:
├── androidTest │ ├── java │ └── res │ └── raw │ └── test_file └── main ├── java └── res └── raw └── app_file
I'm trying to access the
test_file
resource which exists in the raw folder of the androidTest elements. Here's the code inside a Robotium test case that inherits fromActivityInstrumentationTestCase2
:InputStream is = this.getInstrumentation() .getContext() .getResources() .openRawResource(R.raw.test_file);
Android Studio throws a reference error since the resource cannot be found. The exact error is "Cannot resolve symbol test_file".
How can I reference this resource form a test case, which exists on the androidTest resources bundle?
-
Yaroslav Mytkalyk over 8 yearsI've got the same file stucture as the OP, but
raw
is not generated forandroidTest
variant. -
jlhonora over 8 years@YaroslavMytkalyk what kind of file are you putting in the raw folder?
-
Yaroslav Mytkalyk over 8 years@jlhonora a binary file with no extension. Tried renaming it adding some arbitrary extension, which didn't change anything.
-
Victor Paléologue about 4 yearsBy doing so, the resource ends in the published APK too. How to avoid that?
-
yshahak almost 4 yearsEven without
applicationIdSuffix
you should use< applicationId>.test.R
in caseapplicationId
is different than your package name.