我在Android Studio中有以下文件夹结构:
├── androidTest
│ ├── java
│ └── res
│ └── raw
│ └── test_file
└── main
├── java
└── res
└── raw
└── app_file
我正在尝试访问androidTest元素的raw文件夹中存在的test_file
资源。这是继承自ActivityInstrumentationTestCase2
:
InputStream is = this.getInstrumentation()
.getContext()
.getResources()
.openRawResource(R.raw.test_file);
由于无法找到资源,Android Studio会引发参考错误。确切的错误是“无法解析符号test_file”。
如何从androidTest资源包中存在的测试用例中引用此资源?
答案 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