Gradle DSL方法未找到:test()。

5

我尝试在Android-Studio 1.2的build.gradle文件末尾添加以下代码(根据这篇文章的建议):

test {
    testLogging {
        events "passed", "skipped", "failed", "standardOut", "standardError"
    }
}

但是得到了:

Error:(40, 0) Gradle DSL method not found: 'test()'
Possible causes:
- The project 'xxxxx' may be using a version of Gradle that does not contain the method.
- The build file may be missing a Gradle plugin.

我错过了什么?

这是安卓吗?不应该是androidTest吗? - Opal
@Opal,刚尝试了一下androidTest,但是出现了相同的错误(只不过是test()变成了androidTest())。 - Eric Leibenguth
你是否应用了插件?听起来扩展程序没有安装。 - Ben Manes
@BenManes 哪个插件?我有 apply plugin: 'com.android.application'。我尝试添加 apply plugin: 'java' 和/或 apply plugin: 'groovy',但这些显然与 Android 不兼容。 - Eric Leibenguth
1
你能否发布一个最小化的完整构建文件,以展示这个错误?这将有助于我们进行调试。 - Ben Manes
1个回答

16

Gradle文档:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html

说明“test”任务来自于Java插件:

apply plugin: 'java' // adds 'test' task

正如你所说,这与com.android.application插件发生了冲突。

解决方案

我终于找到了如何做到这一点。不要将日志更改应用于测试任务(仅从Java插件中可用),而是可以按以下方式将其应用于所有类型为“Test”的任务:

//Test Logging
tasks.withType(Test) {
    testLogging {
        events "started", "passed", "skipped", "failed"
    }
}
现在当您运行./gradlew test时,应该会在测试处理过程中记录这些事件。

3
你太棒了!提醒未来的自己:将此放在任何其他闭合之外(即不要放在android{}块内部)。 - Shubham Chaudhary
@ShubhamChaudhary,你可以将这个代码放在android.testOptions.unitTests.all中,这样你就不需要先过滤任务了(即略去第一行)。 - Big McLargeHuge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接