我正在使用Robolectric 3而我正在尝试加载test/res/
文件夹中的一些资源。
这是我的文件层次结构:
project/
|-src/
|--main/
|---AndroidManifest.xml
|---res/
|----raw/
|-----prod.json
|--test/
|---java/
|----com.app/
|-----CustomTestRunner.java
|-----Mytest.java
|---res/
|----raw/
|-----test.json
我想在MyTest.java
做类似
RuntimeEnvironment.application.getResources().openRawResource(R.raw.test);
但我不想覆盖我所有的"标准" res/
文件夹,因为我还需要测试中的prod.json
文件。
知道如何做这些事情吗?
谢谢
答案 0 :(得分:2)
而不是将json放在src / test / res / raw中,你可能想把它放在src / test / resources /
中然后你可以通过getResource
使用它(使用最新的构建插件和最新的AS)请注意旧版本中存在错误 - 您需要使用来自金丝雀频道的AS:https://code.google.com/p/android/issues/detail?id=136013
答案 1 :(得分:1)
这是一个已知问题,并在https://code.google.com/p/android/issues/detail?id=136013
进行了跟踪有人报告说这是用gradle android插件版本1.3修复的,但不适用于android studio。针对Android Studio 1.3进行了修复,但有人发布了一个适用于1.2版本中的两种工具的解决方法
这里的代码有一个小的修改,因为我找不到使用过的StringUtils类:
gradle.projectsEvaluated {
def variants = android.applicationVariants.collect()
tasks.withType(Test) { task ->
try {
variants.each { variant ->
def buildTypeName = variant.buildType.name.capitalize()
def productFlavorNames = variant.productFlavors.collect { it.name.capitalize() }
if (productFlavorNames.isEmpty()) {
productFlavorNames = [""]
}
def productFlavorName = productFlavorNames.join('')
def flavor = uncapitalize(productFlavorName)
def variationName = "${productFlavorName}${buildTypeName}"
if (task.name.contains(variationName)) {
def variationPath = variant.buildType.name;
if (productFlavorName != null && !productFlavorName.isEmpty()) {
variationPath = uncapitalize(productFlavorName) + "/" + variationPath
}
def copyTestResourcesTask = project.tasks.create("copyTest${variationName}Resources", Copy)
copyTestResourcesTask.from("${projectDir}/src/test/resources")
copyTestResourcesTask.into("${buildDir}/intermediates/classes/test/${variationPath}")
// Makes the test task depend on the copy test resource variation task
task.dependsOn(copyTestResourcesTask)
variants.remove(variant)
throw new Exception("Break") // Breaking the loop
}
}
} catch (Exception e) {} // Just drop the exception
}
}
答案 2 :(得分:0)
在gradle中,您可以定义添加标准资源的测试资源。
这样的事情:
android{
sourceSets {
test {
res.srcDirs = ['src/test/res', 'src/main/res']
}
}
}