正如标题所说,如果没有找到测试,我怎样才能让测试任务失败呢?当我在--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]
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我知道下面的内容会成功.但即使有test任务,它是否有可能成功?键入测试任务名称的时间超过了,这有点烦人test.
gradle :A:test --tests com.foo.bar.FooTest
M.R*_*uti 10
您描述的行为是当前的 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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果给定的测试不存在于所有子项目中,则可以执行以下命令而不会出现错误:
gradle test --tests com.foo.bar.FooTest
Run Code Online (Sandbox Code Playgroud)
看来目前只有这样的解决方法是可能的:
test {
afterSuite { desc, result ->
if (!desc.parent) {
if (result.testCount == 0) {
throw new IllegalStateException("No tests were found. Failing the build")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经向 Gradle 提交了一个问题,将其作为一个简单的配置选项引入:https ://github.com/gradle/gradle/issues/7452
| 归档时间: |
|
| 查看次数: |
1038 次 |
| 最近记录: |