我正试图让 robospock (roboelectric + spock-framework)作为一个解决方案,因为android gradle插件是愚蠢的并且不让我{{1 }}
然而,robospock似乎不起作用......我试图覆盖apply plugin: 'groovy'
,但到目前为止我尝试的所有内容都是在android-library项目或android项目上工作但不是反之亦然。
在测试org.robospock.RobospockAction.metaClass.execute
项目时,这两项工作都有效:(完整来源:http://pastebin.com/pbxr4vUJ)
android-library
或:
org.robospock.RobospockAction.metaClass.execute = { Project project ->
// Project under test
def put = project.project( project.ext.robospock )
// collect and extract compiled classes in library project
def subProjects = getSubprojects( put ).unique()
def allProjects = subProjects + put
// separate android & normal projects from each other.
def androidProjects = allProjects.findAll { isAndroid( it ) }
def normalProjects = allProjects.findAll { !isAndroid( it ) }
// collect and forward all maven dependencies
def mavenDependencies = collectMavenDependencies( allProjects ).unique()
mavenDependencies.each { dep ->
project.dependencies {
compile group: dep.group, name: dep.name, version: dep.version
}
}
// add normal projects to dependencies.
normalProjects.each { proj ->
project.dependencies { compile proj }
}
// add android projects to dependencies, in an odd way.
def main = project.sourceSets.main
def ssJava = main.java.srcDirs
def ssRes = main.resources.srcDirs
androidProjects.each { proj ->
// Find generated dir.
def variants = proj.plugins.hasPlugin( 'android-library' )
? proj.android.libraryVariants
: proj.android.applicationVariants
def genDir = variants.find { it.name == 'debug' }.dirName
// Add resource sets.
def androidMain = proj.android.sourceSets.main
ssRes.addAll( androidMain.res.srcDirs )
// Add source sets.
ssJava.addAll( androidMain.java.srcDirs )
def sourceDir = proj.buildDir.path + "/generated/source/"
["r/", "buildConfig/"].each {
ssJava.addAll( sourceDir + it + genDir )
}
}
// ...
}
当我尝试将第一个版本用于普通org.robospock.RobospockAction.metaClass.execute = { Project project ->
// Project under test
def put = project.project( project.ext.robospock )
project.dependencies { compile ':' + put.name + ':debugVersion' }
// ...
}
项目时,构建失败并显示:http://pastebin.com/n3AZRMg0
这声称例如:android
- 虽然它还声明package android.support.v4.app does not exist
是一个依赖项(当我做gradle assembleDebug时一切正常)。
第二个版本抱怨没有以各种方式找到以com.android.support:support-v4:20.0.0
为后缀的项目 - :debugVersion
只是一个android-library?
将其更改为:debugVersion
时,它可以正常运行,但也会发布一个版本,由于签名配置和构建时间过长,这是一个很大的禁忌。
1)我如何让gradle只使用一个(android项目作为)依赖项与调试版本 - 或者我如何强制它至少跳过整个发布部分?
2)为什么神秘的错误输出会出现在第一个版本中?
3)我可以通过其他任何方式解决我的问题,即获得基于robospock或spock的测试,以便安卓工作吗?