在我的robolectric测试中,我正在尝试读取文件。 由于此文件仅包含测试数据,因此我将其放在测试的资产中。
目录结构如下所示
src/main/assets/prod_data_file
src/test/assets/test_data_file
但是,当我尝试按getShadowApplication().getAssets().open(MY_FILE_PATH)
阅读文件时,它会给我FileNotFoundException
。
有人知道如何解决这个问题吗?
答案 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()