正如标题所说,如果没有找到测试,我怎样才能让测试任务失败呢?当我将--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
答案 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
请注意测试任务之前的冒号。