Android Studio + Gradle和AndroidTest res / raw

时间:2015-03-11 17:46:17

标签: android android-instrumentation

我有一个Android应用。我想写仪器测试。

我想在测试apk的res/raw文件夹中放入一些特定文件。

我将它们放在androidTest/src/res/raw文件夹中,并使用R.raw.file在代码中引用它们。但是,该应用程序引用了一些其他资源文件,即main源集中的哪一个。

如何确保我的测试apk从其自己的res/raw文件夹中获取正确的文件?

1 个答案:

答案 0 :(得分:2)

你的道路是错的。您想要的路径是src/androidTest/res/raw

此目录中的文件将替换src/main/res/raw中的文件。

此目录中的新文件需要由测试包中的R类访问,而不是应用程序的R文件。

- 更新

如果问题是Android Studio告诉您测试包中不存在R类,那么这是由Android Studio在构建测试R类之前导致的,直到您尝试运行单元测试。通过忽略屏幕上的错误并尝试运行测试来解决此问题。将生成R类并运行测试(假设没有其他错误)。

如果问题是读取文件会产生错误的内容,那么您将从错误的上下文中读取文件。您需要使用Instrumentation中的getContext。

public class ResourceLoadTest extends InstrumentationTestCase {

    public void testLoadResource() throws IOException {
        InputStream inputStream = getInstrumentation().getContext().getResources().openRawResource(com.example.app.test.R.raw.hello);
        try {
            Scanner scanner = new Scanner(inputStream, "UTF-8");
            assertEquals("hello", scanner.nextLine());
        } finally {
            inputStream.close();
        }

    }
}