我有一个安卓应用。我想编写仪器测试。
我想将一些特定文件放在res/raw
测试 apk 的文件夹中。
我将它们放在androidTest/src/res/raw
文件夹中,并在代码中使用R.raw.file
. 但是,该应用程序引用了其他一些资源文件,这是我的main
源集中的一个。
如何确保我的测试 apk 从其自己的res/raw
文件夹中获取正确的文件?
我有一个安卓应用。我想编写仪器测试。
我想将一些特定文件放在res/raw
测试 apk 的文件夹中。
我将它们放在androidTest/src/res/raw
文件夹中,并在代码中使用R.raw.file
. 但是,该应用程序引用了其他一些资源文件,这是我的main
源集中的一个。
如何确保我的测试 apk 从其自己的res/raw
文件夹中获取正确的文件?
你的路径是错误的。你想要的路径是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();
}
}
}