【问题标题】:Android Studio + Gradle and AndroidTest res/rawAndroid Studio + Gradle 和 AndroidTest res/raw
【发布时间】:2015-03-11 17:46:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android android-instrumentation


    【解决方案1】:

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

    【讨论】:

    • 我的路径是一个错字,我就是这样。问题是我似乎无法访问我的测试包 R 的类。
    • 你的更新很值钱。一直想知道为什么它适用于某些项目,而它似乎不适用于其他项目。然后突然,什么都没有它开始工作了。从来没有弄清楚这个问题的根本原因。
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多