首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何访问android测试项目中的资源?

如何访问android测试项目中的资源?
EN

Stack Overflow用户
提问于 2018-03-27 04:27:17
回答 2查看 0关注 0票数 0

我已经安装了一个运行junit测试的android测试项目。它使用两个eclipse项目“Application”和“ApplicationTest”,我的测试位于“ApplicationTest”项目中。在我的一个测试中,我需要访问一个文件,如果我把这个文件放在SD卡上并将一个File对象指向它,这可以正常工作。不过,我想以文件的形式访问该文件,但这似乎不起作用。这就是我所做的:

  • 保存文件 ApplicationTest/res/raw/myfile.xml
  • 尝试使用它: InputStream is = getContext().getResources().openRawResource(R.raw.myfile);

但是这给了我这个例外:

代码语言:javascript
复制
android.content.res.Resources $ NotFoundException:文件Hello World,HelloAndroidActivity!来自可绘制资源ID#0x7f040000
在android.content.res.Resources.openRawResource(Resources.java:823)
在android.content.res.Resources.openRawResource(Resources.java:799)
在com.quizzer.test.QuestionHandlerTests.testImportQuestions(Tests.java:182)
在java.lang.reflect.Method.invokeNative(Native Method)
在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
在android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1448)
由:java.io.FileNotFoundException引发:Hello World,HelloAndroidActivity!
在android.content.res.AssetManager.openNonAssetNative(Native Method)
在android.content.res.AssetManager.openNonAsset(AssetManager.java:406)
在android.content.res.Resources.openRawResource(Resources.java:820)
... 14更多

我的测试类扩展了AndroidTestCase,这就是上下文的来源:

更新:

所以问题似乎是在编译过程中使用了测试项目中的资源,但是在运行时使用了主项目中的资源。我还不确定如何解决这个问题。因此,目前只有当我在测试项目和主项目中放入相同的原始资源时,它才会起作用。

EN

回答 2

Stack Overflow用户

发布于 2018-03-27 12:39:41

我会建议扩展ActivityTestCase而不是AndroidTestCase。你可以通过访问测试项目资源:

getInstrumentation().getContext().getResources().openRawResource(R.raw.your_res).

虚拟测试案例:

代码语言:javascript
复制
public class Test extends ActivityTestCase {

   public void testFoo() {  

      // .. test project environment
      Context testContext = getInstrumentation().getContext();
      Resources testRes = testContext.getResources();
      InputStream ts = testRes.openRawResource(R.raw.your_res);

      assertNotNull(testRes);
   }    
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-27 14:23:32

我推导出如下测试用例:

代码语言:javascript
复制
class MyTest extends InstrumentationTestCase {
    void setUp() {
        InputStream is = getInstrumentation().getContext().getAssets()
            .open("test_image.bmp");
        ...
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档