我正在尝试使用roboelectric 3.3.2运行需要访问assets文件夹中文件的测试
RuntimeEnvironment.application.getAssets().open("my_file");
但我总是收到此错误
java.io.FileNotFoundException: build/intermediates/bundles/debug/assets/my_file (No such file or directory)
我真正无法理解的是,即使我以这种方式为资产目录指定路径
@Config(constants = BuildConfig.class, sdk = 23, assetDir = "/home/")
我仍然得到相同的错误,我的意思是错误与相同的路径build/intermediates...
所以,assetDir值被忽略?或者我在这里遗漏了什么?
是否可以从资产文件夹中打开文件而不会有太多麻烦?
修改
按照建议我尝试将资产文件复制到test / resources文件夹但是我仍然得到相同的错误,仍然与build / itermediates相同的FileNotFoundException ..路径
android {
sourceSets {
String sharedTestJavaDir = 'src/sharedTest/java'
test {
java.srcDirs += [sharedTestJavaDir]
}
androidTest {
java.srcDirs += [sharedTestJavaDir]
resources.srcDirs += ['src/test/resources']
}
}
}
答案 0 :(得分:1)
Roboletric无法读取实际设备断言文件夹,因此您必须虚拟定义某个位置并将资源转储到该路径,如下所示:
对于robolectric,您必须定义断言路径,如下所示:
android {
sourceSets {
String sharedTestJavaDir = 'src/sharedTest/java'
test {
java.srcDirs += [sharedTestJavaDir]
}
androidTest {
java.srcDirs += [sharedTestJavaDir]
resources.srcDirs += ['src/test/resources']
}
}
}
以这种方式从你的androidTest环境访问fixture文件:
this.getClass().getClassLoader().getResourceAsStream(filename);
答案 1 :(得分:0)
使Roboelectric
就像Android设备一样将其放入build.gradle
android {
testOptions {
unitTests {
includeAndroidResources = true
}
}
}