在我的案例中,在Android测试项目中读取文件

时间:2015-06-03 12:04:28

标签: android android-testing

我有一个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的方式来读取文件?

2 个答案:

答案 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);