尝试使用Roboelectric读取资产时出现FileNotFoundException

时间:2017-05-29 19:40:44

标签: android unit-testing robolectric

我正在尝试使用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']
        }
    }
}

2 个答案:

答案 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
    }
  }
}