【问题标题】:How to load the same JSON file in both an Android app and local unit test?如何在 Android 应用程序和本地单元测试中加载相同的 JSON 文件?
【发布时间】:2015-10-30 20:29:33
【问题描述】:

我有一个显示来自 JSON 文件的数据的 Android 项目。该文件是从 assets 目录中读取的,方法如下:

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 文件的本地单元测试。为了避免 Instrumentation 测试的缓慢,我目前正在加载文件的副本,如下所示:

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 上运行单元测试?

【问题讨论】:

    标签: java android unit-testing junit android-testing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      可以在 Android 应用程序中使用 ClassLoader#getResourceAsStream() 访问资源目录中的文件。这将返回一个 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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-17
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        相关资源
        最近更新 更多