Android测试原始资源

时间:2015-08-24 16:29:28

标签: android android-resources robotium

我在Android Studio中有以下文件夹结构:

├── androidTest
│   ├── java
│   └── res
│       └── raw
│           └── test_file
└── main
    ├── java
    └── res
        └── raw
            └── app_file

我正在尝试访问androidTest元素的raw文件夹中存在的test_file资源。这是继承自ActivityInstrumentationTestCase2

的Robotium测试用例中的代码
InputStream is = this.getInstrumentation()
                 .getContext()
                 .getResources()
                 .openRawResource(R.raw.test_file);

由于无法找到资源,Android Studio会引发参考错误。确切的错误是“无法解析符号test_file”。

如何从androidTest资源包中存在的测试用例中引用此资源?

4 个答案:

答案 0 :(得分:40)

默认情况下,你的androidTest项目将包含你的应用程序的R类,但androidTest的资源将生成一个单独的文件。确保从测试项目中导入R类:

import com.your.package.test.R;

[..]

getInstrumentation().getContext().getResources().openRawResource(R.raw.test_file);

您也可以直接引用测试项目的R类:

getInstrumentation().getContext().getResources().openRawResource(com.your.package.test.R.raw.test_file);

答案 1 :(得分:13)

我的androidTest资源位于正确的位置(src/androidTest/res),我仍然无法通过<normal.package>.test.R访问它们。我花了很多时间谷歌搜索试图弄清楚发生了什么......

我最终偶然发现了答案。如果您正在构建buildType,并指定了applicationIdSuffix,那么您的文件位于<applicationId><applicationIdSuffix>.test.R !!!!

applicationId "com.example.my.app"

buildTypes {
    debug {
        applicationIdSuffix ".debug"
    }
}

如果您在正确的目录中有androidTest资源,那么您只能通过com.example.my.app.debug.test.R访问它们!!!!

答案 2 :(得分:0)

请参见Android Unit Tests Requiring Context。对于仪器测试,请使用InstrumentationRegistry.getInstrumentation().getTargetContext()(在Kotlin中:getInstrumentation().targetContext)。然后,您可以访问resources。您无需导入R文件。

答案 3 :(得分:0)

正如其他人所说,androidTest 资源 ID 默认在 <applicationId>.test.R 中生成。由于 applicationId 可以被不同的构建类型和风格修改,这会导致每个构建类型和风格的 R 文件位置不同。这可以通过在 build.gradle 中应用程序的 android 配置的 defaultConfig 中将显式值分配给 testApplicationId 来更改。如果有多个构建类型/风格改变了 appId,这会很有用,但可以针对其中任何一个运行测试。

build.gradle(应用):

android {
    defaultConfig {
    applicationId "com.example.hello"
    testApplicationId = "com.example.hello.test"
    }
}

测试文件:

import com.example.hello.test.R