2015-08-24 57 views
25

我在Android Studio中的以下文件夹结构:的Android测试原始资源

├── androidTest 
│   ├── java 
│   └── res 
│    └── raw 
│     └── test_file 
└── main 
    ├── java 
    └── res 
     └── raw 
     └── app_file 

我试图访问它存在于androidTest元素的原始文件夹中的test_file资源。下面是从ActivityInstrumentationTestCase2继承Robotium测试用例中的代码:

InputStream is = this.getInstrumentation() 
       .getContext() 
       .getResources() 
       .openRawResource(R.raw.test_file); 

Android Studio中抛出一个参考错误,因为资源不能被发现。确切的错误是“无法解析符号test_file”。

如何才能引用此资源形成一个测试用例,它存在于androidTest资源包中?

+0

你有工具可以为你生成树吗? –

+0

是的,bash'tree'工具 – jlhonora

+0

非常感谢您的提示 –

回答

32

默认情况下,您的androidTest项目将包含您的应用程序的R类,但androidTest的资源将生成一个单独的文件。请确保您从测试项目导入R类:

import com.your.package.test.R; 

[..] 

getInstrumentation().getContext().getResources().openRawResource(R.raw.test_file); 

您也可以直接引用测试项目的R类别:

getInstrumentation().getContext().getResources().openRawResource(com.your.package.test.R.raw.test_file); 
+3

我有和OP相同的文件结构,但'android'不会生成'raw'变种。 –

+0

@YaroslavMytkalyk你把什么样的文件放在原始文件夹中? – jlhonora

+0

@jlhonora一个没有扩展名的二进制文件。试图重命名它添加一些任意扩展,这并没有改变任何东西。 –

9

我有androidTest资源在正确的位置(src/androidTest/res)和我仍然无法通过<normal.package>.test.R访问它们。我花了大量的时间搜索,试图找出发生了什么事。

我最后偶然发现了答案。如果你正在构建一个buildType,你指定了一个applicationIdSuffix,你的文件在<applicationId><applicationIdSuffix>.test.R !!!!

applicationId "com.example.my.app" 

buildTypes { 
    debug { 
     applicationIdSuffix ".debug" 
    } 
} 

如果你已经在正确的目录androidTest资源,那么你就只能通过com.example.my.app.debug.test.R访问它们!!!!