Android单元测试 - 没有这样的属性:bootClasspath

时间:2015-02-10 14:29:14

标签: android unit-testing gradle android-gradle

我正在尝试在宣布单元测试支持后执行Android的简单测试用例 - http://tools.android.com/tech-docs/unit-testing-support

在仔细观察演练之后,我正在尝试运行./gradlew test。 我收到了这个错误:

Execution failed for task ':app:compileDebugGroovy'.
> No such property: bootClasspath for class: com.android.build.gradle.AppPlugin

使用com.android.tools.build:gradle:1.1.0-rc1

其他人都被困在那?

3 个答案:

答案 0 :(得分:12)

问题是Groovy Android Gradle插件(让Groovy在Android上运行)并不是简单地使用版本1.1.0-rcX中的Android插件。

这是一段非常有趣的代码,直接来自groovyx.grooid.GroovyAndroidPlugin,版本0.3.5(当前最新,此处为source

    def getRuntimeJars(Project project, plugin) {
    int index
    switch (getAndroidPluginVersion(project)) {
        case ~/0\.9\..*/:
            index = 0
            break
        case ~/0\.10\..*/:
        case ~/0\.11\..*/:
        case ~/0\.12\..*/:
        case ~/0\.13\..*/:
        case ~/0\.14\..*/:
        case ~/1\.0\..*/:
            index = 1
            break
        default:
            index = RUNTIMEJARS_COMPAT.size()-1
    }
    def fun = RUNTIMEJARS_COMPAT[index]
    fun(plugin)
}

RUNTIMEJARS_COMPAT的定义:

private static List RUNTIMEJARS_COMPAT = [
        { it.runtimeJars },
        { it.bootClasspath }
]

因此,我必须在0.9.x0.10.0之间的Android Gradle中更改API(是的,我知道 - 那些Google开发者改变了所有内容:[)。因此,让我们来看看在Android插件版本1.0.0中制作类的问题:

> javap -cp [path to proper jar] com.android.build.gradle.AppPlugin:

public class com.android.build.gradle.AppPlugin extends com.android.build.gradle.BasePlugin implements org.gradle.api.Plugin<org.gradle.api.Project> {
...
public java.util.List super$2$getBootClasspath();
...

烨!我们需要的方法(来自父com.android.build.gradle.BasePlugin类)。现在版本1.1.0-rc3中没有类似的东西。更重要的是,com.android.build.gradle.AppPlugin的API已完全更改,因此修复此问题并非简单if(version)

我想在作者更新插件之前,没有机会让Groovy Android Gradle插件使用单元测试(自1.1.0起)。

让我们等一下。

答案 1 :(得分:1)

测试支持功能是实验性的。也就是说,可能没有快速解决您的问题或可能是一个错误。

然而,我会深入研究这个,阅读信息: 这一行Execution failed for task ':app:compileDebugGroovy'.提到了这个任务,所以我会去看看那个任务的作用。我想这是一个交付的任务。错误是该任务中存在缺少> No such property: bootClasspath for class: com.android.build.gradle.AppPlugin

的属性

所以也许尝试找到该任务并确保为AppPlugin类设置了bootClasspath属性。

答案 2 :(得分:0)

尝试升级到新版本( RC3

dependencies {
    classpath 'com.android.tools.build:gradle:1.1.0-rc3'
    // ..
}

您也可以在此处使用look,以便将您当前的设置与工作示例进行比较。

相关问题