【问题标题】:Loading a text file from AndroidTestProject从 AndroidTestProject 加载文本文件
【发布时间】:2011-04-28 08:05:53
【问题描述】:

我有两个项目,我的主要 android 应用程序和另一个在该 android 应用程序之上运行的测试项目。

我在我的android测试项目中放置了一个文本文件,这个文件包含信息xml内容。 xml 内容是我的 android 应用程序在我访问服务器时将收到的内容。

我在我的 Android 测试项目中使用 TestCase 类来测试这个功能。不幸的是,我在将内容加载到我的 Android 测试项目时遇到问题。每次我尝试将文件加载到我的 Android 测试项目中时,它都找不到文本文件。我是否正确地说,我可以访问该文件的唯一方法是将其从我的 Android 测试项目中删除并将其放入我的实际 Android 项目中,或者我是否遗漏了一些可以让我从我的 Android 测试项目中加载文件的东西。

详情: 在我的 Android 测试项目中,我将文件保存在 /res/raw/testFile 下 当我尝试做

File myFile = new File("/res/raw/testFile");

我得到一个 java.io.FileNotFoundException: /res/raw/testFile (没有这样的文件或目录)

谢谢

【问题讨论】:

    标签: android unit-testing file-io


    【解决方案1】:

    Android Gradle Plugin 1.1 版以来,您无需使用Instrumentation 加载文件资源。

    我写了here 如何使用 POJO unit test 案例。

    【讨论】:

      【解决方案2】:

      我正在使用 TestCase 类。

      扩展 TestCase 时无法访问系统资源。 TestCase 是 jUnit 而不是 android 的一部分。

      相反,您可以扩展 InstrumentationTestCase。这将允许您访问目标应用程序的上下文 getInstrumentation().getTargetContext() 和测试应用程序的上下文 getInstrumentation().getContext()

      然后您可以按如下方式访问您的原始文件。

      Context testContext = getInstrumentation().getContext();
      InputStream input = testContext.getResources().openRawResource(R.raw.sample);
      

      如果您在处理输入流方面需要帮助,请查看 this question

      【讨论】:

      • 感谢您对问题的回复。我不再从事那个项目,但这很可能是问题所在。
      【解决方案3】:

      据我所知,一个应用程序的资源不能与另一个应用程序共享,除非您将其设置为内容提供者或其他..

      我的建议是将这个文件写在 /sdcard//sample.xml 之类的常见位置。

      两个应用的读写权限。

      【讨论】:

        猜你喜欢
        • 2017-05-13
        • 2012-10-27
        • 1970-01-01
        • 2012-06-12
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多