我有一个Android Test项目,项目结构如下:
MyAndroidTestProj
- src/
- MyTestCase.java
- res/
- raw/
- file1
MyTestCase是这样的:
public class MyTestCase extends AndroidTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
//How to read the file1 under res/raw/ folder?
}
...
}
我想知道如何阅读file1
下的res/raw/
?是否有特定于Android的方式来读取文件?
答案 0 :(得分:0)
首先应获取资源的ID,然后将其转换为InputStream,以便使用它的内容。所以使用这段代码:
InputStream ins = getResources()
.openRawResource(getResources()
.getIdentifier("raw/FILENAME_WITHOUT_THE_EXTENSION","raw", getPackageName()));
然后使用一个BufferedReader
,您可以获得InputStream
BufferedReader r = new BufferedReader(new InputStreamReader(ins));
StringBuilder content = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
content.append(line);
}
答案 1 :(得分:0)
修改:
如评论所述,AndroidTestCase不提供getInstrumentation
,但它确实提供了getContext()
方法,它为您提供了经过测试的应用程序的上下文。但是,当您想要从测试应用程序获取资源时,您需要访问在AndroidTestCase中定义但隐藏的getTestContext()
方法。
作为一种解决方法,您可以使用反射来访问它,如下所述:
http://kmansoft.com/2011/04/18/accessing-resources-in-an-androidtestcase/
try {
Method m = AndroidTestCase.class.getMethod("getTestContext", new Class[] {});
Context testContext = (Context) m.invoke(this, (Object[]) null);
testContext.getResources().openRawResource(R.raw.file1);
} catch (Exception x) {
Log.e(TAG, "Error getting test context: ", x);
throw x;
}
旧回答:
要从测试项目中获取原始资源,请使用
getInstrumentation().getContext().getResources().openRawResource(R.raw.file1);
如果您想从被测项目中获取它们,则必须使用目标上下文:
getInstrumentation().getTargetContext().getResources().openRawResource(R.raw.file1);