在robolectric测试中使用资产

时间:2014-07-08 12:05:26

标签: android robolectric android-testing

在我的robolectric测试中,我正在尝试读取文件。 由于此文件仅包含测试数据,因此我将其放在测试的资产中。

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

但是,当我尝试按getShadowApplication().getAssets().open(MY_FILE_PATH)阅读文件时,它会给我FileNotFoundException

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

3 个答案:

答案 0 :(得分:17)

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

我刚刚将我的测试数据文件移到src/test/resources并且它运行正常。 :)

答案 1 :(得分:0)

我能够这样做:

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' )
    }
  }
}

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

答案 2 :(得分:0)

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

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