Android 测试原始资源
Android test raw resource
我在 Android Studio 中有以下文件夹结构:
├── androidTest
│ ├── java
│ └── res
│ └── raw
│ └── test_file
└── main
├── java
└── res
└── raw
└── app_file
我正在尝试访问 androidTest 元素的原始文件夹中存在的 test_file
资源。这是继承自 ActivityInstrumentationTestCase2
:
的 Robotium 测试用例中的代码
InputStream is = this.getInstrumentation()
.getContext()
.getResources()
.openRawResource(R.raw.test_file);
Android Studio 抛出引用错误,因为找不到资源。准确的错误是 "Cannot resolve symbol test_file".
如何从 androidTest 资源包中存在的测试用例中引用此资源?
默认情况下,您的 androidTest 项目将包含您应用的 R class,但 androidTest 的资源将生成到一个单独的文件中。确保从测试项目中导入 R class:
import com.your.package.test.R;
[..]
getInstrumentation().getContext().getResources().openRawResource(R.raw.test_file);
也可以直接引用测试项目的R class:
getInstrumentation().getContext().getResources().openRawResource(com.your.package.test.R.raw.test_file);
我在正确的位置 (src/androidTest/res
) 拥有 androidTest
资源,但我仍然无法通过 <normal.package>.test.R
访问它们。我花了很多时间谷歌搜索试图弄清楚发生了什么..
我终于找到了答案。如果您在指定 applicationIdSuffix
的地方构建 buildType
,您的文件位于 <applicationId><applicationIdSuffix>.test.R
!!!!
即
applicationId "com.example.my.app"
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
如果您在正确的目录中有 androidTest 资源,那么您只能通过 com.example.my.app.debug.test.R
!!!!
访问它们
参见Android Unit Tests Requiring Context。对于仪器测试,使用 InstrumentationRegistry.getInstrumentation().getTargetContext()
(在 Kotlin 中:getInstrumentation().targetContext
)。然后就可以访问resources
了。您不需要导入 R
文件。
正如其他人所说,android测试资源 ID 默认在 <applicationId>.test.R
中生成。由于 applicationId
可以通过不同的构建类型和风格进行修改,这导致它们各自的 R 文件位置不同。这可以通过在 build.gradle 中应用的 android 配置的 defaultConfig 中为 testApplicationId
分配显式值来更改。如果有多个构建 types/flavors 改变了 appId,它会很有用,但测试可以是 运行 任何一个。
build.gradle(应用):
android {
defaultConfig {
applicationId "com.example.hello"
testApplicationId = "com.example.hello.test"
}
}
测试文件:
import com.example.hello.test.R
我在 Android Studio 中有以下文件夹结构:
├── androidTest
│ ├── java
│ └── res
│ └── raw
│ └── test_file
└── main
├── java
└── res
└── raw
└── app_file
我正在尝试访问 androidTest 元素的原始文件夹中存在的 test_file
资源。这是继承自 ActivityInstrumentationTestCase2
:
InputStream is = this.getInstrumentation()
.getContext()
.getResources()
.openRawResource(R.raw.test_file);
Android Studio 抛出引用错误,因为找不到资源。准确的错误是 "Cannot resolve symbol test_file".
如何从 androidTest 资源包中存在的测试用例中引用此资源?
默认情况下,您的 androidTest 项目将包含您应用的 R class,但 androidTest 的资源将生成到一个单独的文件中。确保从测试项目中导入 R class:
import com.your.package.test.R;
[..]
getInstrumentation().getContext().getResources().openRawResource(R.raw.test_file);
也可以直接引用测试项目的R class:
getInstrumentation().getContext().getResources().openRawResource(com.your.package.test.R.raw.test_file);
我在正确的位置 (src/androidTest/res
) 拥有 androidTest
资源,但我仍然无法通过 <normal.package>.test.R
访问它们。我花了很多时间谷歌搜索试图弄清楚发生了什么..
我终于找到了答案。如果您在指定 applicationIdSuffix
的地方构建 buildType
,您的文件位于 <applicationId><applicationIdSuffix>.test.R
!!!!
即
applicationId "com.example.my.app"
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
如果您在正确的目录中有 androidTest 资源,那么您只能通过 com.example.my.app.debug.test.R
!!!!
参见Android Unit Tests Requiring Context。对于仪器测试,使用 InstrumentationRegistry.getInstrumentation().getTargetContext()
(在 Kotlin 中:getInstrumentation().targetContext
)。然后就可以访问resources
了。您不需要导入 R
文件。
正如其他人所说,android测试资源 ID 默认在 <applicationId>.test.R
中生成。由于 applicationId
可以通过不同的构建类型和风格进行修改,这导致它们各自的 R 文件位置不同。这可以通过在 build.gradle 中应用的 android 配置的 defaultConfig 中为 testApplicationId
分配显式值来更改。如果有多个构建 types/flavors 改变了 appId,它会很有用,但测试可以是 运行 任何一个。
build.gradle(应用):
android {
defaultConfig {
applicationId "com.example.hello"
testApplicationId = "com.example.hello.test"
}
}
测试文件:
import com.example.hello.test.R