使用Gradle运行所有JUnit测试

时间:2018-03-11 11:42:10

标签: java gradle

我有一个使用Gradle作为构建系统的Java应用程序。这是多项目构建的(几个Java项目)。

当我运行gradlew test并且某些测试失败时,我注意到并非所有测试都实际运行。

如果我将以下代码添加到build.gradle,它会运行所有测试,但当然,构建的内容总是成功完成:

test {
    ignoreFailures = true
}

我有两个问题:

  1. gradle在第一次失败后是否停止执行测试?
  2. 有没有办法运行所有测试(即使有些失败)并且如果其中一些失败仍然存在构建失败?

2 个答案:

答案 0 :(得分:2)

确保从项目的根目录运行测试。

test任务是Gradle的Java插件的一部分。从官方文件中可以看出:

具有大型测试套件的项目可能需要很长时间才能执行,即使在早期发生故障导致不必要的等待时间(尤其是在CI上)。要使此行为短路,Test.getFailFast()属性允许您在第一次测试失败后使测试任务失败,而不是运行所有测试。当此属性为true时,结果输出将仅显示已完成且包括失败的测试结果。要在构建文件中启用此失败快速行为,请将failFast属性设置为true:

test {
    failFast = true
}

--fail-fast命令行选项可以从命令行启用该行为。调用如下:

gradle test --fail-fast

failFast属性的默认值为false。

可以找到官方文档here

所以回答你的问题:

  1. 默认情况下,Gradle在第一次失败后不会停止执行测试。可以使用failFast属性修改此行为。

  2. 默认行为应该可以解决问题。通过运行gradle test,将运行所有测试。如果其中任何一个失败,则构建将失败。由于您有多项目构建,请确保从根项目中运行Gradle。

答案 1 :(得分:1)

Gradle提供--continue参数gradlew build --continue,无论成功与否,都会执行所有任务。但是,如果任何执行的任务失败,则整个构建将标记为失败。

我认为你正在寻找那个转变。