【问题标题】:Run all JUnit tests with Gradle使用 Gradle 运行所有 JUnit 测试
【发布时间】:2018-08-19 13:13:13
【问题描述】:

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

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

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

test {
    ignoreFailures = true
}

我有两个问题:

  1. 第一次失败后,gradle 是否停止执行测试?
  2. 有没有一种方法可以运行所有测试(即使有些测试失败),如果其中一些测试失败,构建仍然会失败?

【问题讨论】:

    标签: java gradle


    【解决方案1】:

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

    我想你正在寻找那个开关。

    【讨论】:

      【解决方案2】:

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

      test 任务是 Java Plugin for Gradle 的一部分。来自官方文档:

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

      test {
          failFast = true
      }
      

      --fail-fast 命令行选项启用命令行中的行为。调用如下所示:

      gradle test --fail-fast
      

      failFast 属性的默认值为 false。

      官方文档可见here

      所以回答你的问题:

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

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

      【讨论】:

      • 我从根项目运行它。这是一个闭源项目,所以我无法显示代码,但我确信要执行的任务数量是不同的。我会试试你的建议。谢谢
      • @IdoRan 请告诉我们问题出在哪里(一旦解决)。另外,如果它回答了你所有的问题,你可以接受这个答案。
      猜你喜欢
      • 2014-01-09
      • 2020-03-09
      • 2016-03-13
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      相关资源
      最近更新 更多