Java 如何在Android应用程序和本地单元测试中加载相同的JSON文件?

Java 如何在Android应用程序和本地单元测试中加载相同的JSON文件?,java,android,unit-testing,junit,android-testing,Java,Android,Unit Testing,Junit,Android Testing,我有一个Android项目,它显示JSON文件中的数据。按照以下方法从资产目录中读取文件: src/main/assets/my_file.json InputStream is = getResources().getAssets().open(filename); BufferedReader br = new BufferedReader(new InputStreamReader(is)); // use StringBuilder to get file contents as St

我有一个Android项目,它显示JSON文件中的数据。按照以下方法从资产目录中读取文件:

src/main/assets/my_file.json

InputStream is = getResources().getAssets().open(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// use StringBuilder to get file contents as String
我还有需要相同JSON文件的本地单元测试。为了避免仪器测试的缓慢,我目前正在加载文件的副本,如下所示:

src/main/resources/my_copy.json

File testData = new File(getClass().getResource(filename).getPath());
InputStream is = new FileInputStream(testData);
// read File as before

是否有一种方法允许JSON文件存储在一个位置,同时在本地JVM上运行单元测试?

如果您使用的是Robolectric,请参阅


注意,“资产”目录是一个Android概念,它不同于Java资源。也就是说,您还可以将JSON文件从
资产
移动到
资源
,并像在任何Java应用程序中一样从Android和JVM表单中使用它。

资源目录中的文件可以在Android应用程序中使用。这将返回一个InputStream,然后可用于读取文件。这样可以避免在资源和资产目录之间复制文件

InputStream is = getClass().getClassLoader().getResourceAsStream("my_file.json");
BufferedReader br = new BufferedReader(new InputStreamReader(is));

String line = null;
StringBuilder sb = new StringBuilder();

while ((line = br.readLine()) != null) {
    sb.append(line);
    }
}
String json = sb.toString();