I am working on an android app and I have created a new test project for unit tests. Where's recommended to store the test fixtures (like xml files and the like) and what's the proper way to access it ?
3 Answers
It depends if you really mean unit test or instrumented tests (like using espresso and stuff)...
Unit tests:
- Put your fixtures in
src/test/resources
(so e.g.src/test/resources/fixture.json
) - Access them from your test classes e.g. using:
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("fixture.json")
Instrumented tests:
- Put your fixtures in
src/androidTest/assets/
(so e.g.src/androidTest/assets/fixture.json
) - Access them from your test classes e.g. using:
InputStream is = InstrumentationRegistry.getContext().getResources().getAssets().open("fixture.json")
Here are some examples of how you can convert InputStream
to String
.
Here's a pretty good post describing different cases.
P.S. I know this question is 6+ years old... answering for any future searches.

- 30,698
- 10
- 94
- 132
After some searching I found there is no one proper way to store fixtures in Android (also not so much in java either).
Fixtures are a way to provide easy and consistent data to be passed into test cases. Creating .java
classes with static methods that return objects is one way to go.
Example:
public class Pojos {
public static List<TaskListItem> taskListItems() {
return Arrays.asList(
new TaskListItem("one"),
new TaskListItem("two"),
new TaskListItem("three")
);
}
}

- 18,146
- 4
- 66
- 89
You can configure Gradle to read resources from a shared folder, you will be able to share code and resources either in unit test or instrumented test by doing the following.
android {
// ...
sourceSets {
final String sharedJavaDir = 'src/sharedTest/java'
final String sharedResourcesDir = 'src/sharedTest/resources'
test.java.srcDirs += sharedJavaDir
test.resources.srcDirs += [sharedResourcesDir]
androidTest.java.srcDirs += sharedJavaDir
androidTest.resources.srcDirs += [sharedResourcesDir]
// ....
}
// ...
}
Let's imagine that I setup a shared test resource in
/app/src/sharedTest/resources/test_fixture_file.txt
Kotlin code
In a UnitTest or Instrumented test you can use.
val resource: InputStream? = this.javaClass.getResourceAsStream("/test_fixture_file.txt")

- 418
- 3
- 10
-
This does not work in current Intellij/AndroidStudio as IntelliJ does not support have the same srcDir folder in two separate modules sourceSet. IntelliJ will give you a warning when opening the dir. – arberg Oct 31 '22 at 09:41