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