【问题标题】:Using assets in robolectric tests在 robolectric 测试中使用资产
【发布时间】:2021-02-12 18:40:55
【问题描述】:

在我的 robolectric 测试中,我试图读取一个文件。 由于此文件仅包含测试数据,因此我已将其放入测试资产中。

目录结构如下所示。
src/main/assets/prod_data_file
src/test/assets/test_data_file

但是,当我尝试通过getShadowApplication().getAssets().open(MY_FILE_PATH) 读取文件时,它给了我FileNotFoundException

有人知道如何解决这个问题吗?

【问题讨论】:

  • 你必须把你的文件放在 assets 文件夹中。之后使用InputStream is = getResources().getAssets().open(filename); 的文件名。
  • 测试目录中的资产?还是应用目录中的资产?
  • 嗯?抱歉,我知道 Eclipse 环境中没有测试目录。我也不知道应用程序目录。 Ment 是项目的资产目录。
  • 我已编辑问题以使其更清晰

标签: android robolectric android-testing


【解决方案1】:

由于我的测试只是读取这些文件并将文件数据作为String 返回,因此我能够通过getClass().getClassLoader().getResourceAsStream(MY_FILE_PATH) 执行此操作,然后读取文件。真的不需要阅读即可使用getShadowApplication().getAssets().open(MY_FILE_PATH)

我刚刚将我的测试数据文件移动到 src/test/resources 并且它有效。 :)

【讨论】:

  • 出现此错误的原因是测试任务(不是 androidTest)用于单元测试,并且根本没有为这些任务复制任何资产(截至 2015 年 5 月)。因此,即使 AS 很好地突出了 src/test 中的资产文件夹,它也完全没有相关性。没有构建任何 APK,因此通常您不应该能够访问资产,只有 robolectric 现在为您提供了这样做的可能性。
  • 谢谢它救了我一天
  • 太好了,谢谢!这样文件就会从发布的 apk 或 aar 文件中排除。
  • 不要把res目录和resources目录混在一起!
【解决方案2】:

我能做到这样:

1) 在测试文件夹中复制(或创建)AndroidManifest.xml

2) 为这个特定的测试添加@Config(emulateSdk = 18, manifest = "src/test/AndroidManifest.xml")

我能够读取文件。所以这意味着你可以使用AndroidManifest 类和自定义跑步者(更多灵感在这里https://groups.google.com/forum/#!topic/robolectric/YvbdqRFcdnA

我觉得也可以和build.gradle一起玩:

android {
  sourceSets {
    androidTest.setRoot( 'src/test' )

    androidTest {
      assets.srcDir file( 'src/test/assets' )
    }
  }
}

但我不确定,因为插件不会创建任何构建变体,而只是创建任务。

【讨论】:

    【解决方案3】:

    在 Android Studio 中,创建测试资产文件夹(右键单击测试目录 -> 新建 -> 目录 -> 从列表中选择资产)。 将您的文件添加到您刚刚创建的测试资产文件夹中。 在您的 Robolectric 测试中,您可以像这样读取文件:

    val context = ApplicationProvider.getApplicationContext<Context>()
    context.resources.assets.open(SOME_FILENAME)
        .bufferedReader()
    

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多