Android Studio + Gradle 和 AndroidTest res/raw

Tia*_*oso 0 android android-instrumentation

我有一个安卓应用。我想编写仪器测试。

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

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

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

Mic*_*sel 6

你的路径是错误的。你想要的路径是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();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)