【问题标题】:Android test raw resourceAndroid测试原始资源
【发布时间】:2015-11-18 04:01:36
【问题描述】:

我在 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 会引发引用错误。确切的错误是“无法解析符号 test_file”。

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

【问题讨论】:

  • 你有没有工具可以为你生成树?
  • 是的,bash 'tree' 工具
  • 非常感谢您的提示
  • 你想从哪里得到你的test_file?来自androidTest/java 中编写的 Robotium 测试?

标签: android android-resources robotium


【解决方案1】:

默认情况下,您的 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);

【讨论】:

  • 我的文件结构与 OP 相同,但不会为 androidTest 变体生成 raw
  • @YaroslavMytkalyk 你把什么样的文件放在原始文件夹中?
  • @jlhonora 一个没有扩展名的二进制文件。尝试重命名它添加一些任意扩展,这并没有改变任何东西。
  • 这样,资源也以发布的 APK 结尾。如何避免?
【解决方案2】:

我在正确的位置 (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访问它们!!!!

【讨论】:

  • 即使没有applicationIdSuffix,你也应该使用< applicationId>.test.R,以防applicationId与你的包名不同。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    正如其他人所说,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
    

    【讨论】:

      猜你喜欢
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2011-12-21
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      相关资源
      最近更新 更多