如果没有找到测试,如何使gradle不标记构建失败

时间:2014-10-01 17:51:51

标签: gradle

正如标题所说,如果没有找到测试,我怎样才能让测试任务失败呢?当我将--tests命令行选项与多子项目项目一起使用时,我遇到了这个问题。例如,下面的命令将运行子项目A的类FooTest中的所有测试:
gradle test --tests com.foo.bar.FooTest

但是,此命令失败的原因是:

Execution failed for task ':B:test'.
> No tests found for given includes: [com.foo.bar.FooTest]
顺便说一句,我知道下面的内容会成功。但即使使用test任务,它是否有可能成功?输入超过test的测试任务名称会很烦人。

gradle :A:test --tests com.foo.bar.FooTest

3 个答案:

答案 0 :(得分:0)

似乎目前只有这样一种解决方法:

test {
    afterSuite { desc, result ->
        if (!desc.parent) {
            if (result.testCount == 0) {
                throw new IllegalStateException("No tests were found. Failing the build")
            }
        }
    }
}

我已向Gradle提出问题,以将其作为简单的配置选项进行介绍:https://github.com/gradle/gradle/issues/7452

答案 1 :(得分:0)

您描述的行为是当前Gradle行为,在Gradle论坛上已经有一张票,请参见https://discuss.gradle.org/t/multi-module-build-fails-with-tests-filter/25835

基于此票证中所述的解决方案,您可以执行类似的操作来禁用“ failIfNoTest”默认行为:

在您的根项目构建中(或更好的是:在Gradle USER_HOME目录中的InitScript 中,以使此行为可用于所有本地项目)

gradle.projectsEvaluated {
    subprojects {
        // TODO: filter projects that does not have test task...
        test {
            filter {
                setFailOnNoMatchingTests(false)
            }
        }
    }
}

然后,如果在所有子项目中都不存在给定的测试,则可以执行以下命令而不会出错:

gradle test --tests com.foo.bar.FooTest

答案 2 :(得分:0)

您还可以使用来仅对当前项目运行测试

gradle :test --tests com.foo.bar.FooTest

请注意测试任务之前的冒号。