【问题标题】:How to include/exclude junit5 tags in gradle cmd?如何在 gradle cmd 中包含/排除 junit5 标签?
【发布时间】:2020-03-01 10:35:09
【问题描述】:

我想执行标记的 JUnit 5 测试,例如。只有慢速测试,使用 gradle。

我想在 maven 中做同样的事情:

mvn test -Dgroups="slow"

但是 gradle 中的等价物是什么?还是有什么?

执行所有标有@Tag("slow") 的JUnit 5 测试。我知道创建这样的专用任务非常简单:

tasks.withType(Test::class.java).configureEach {
  useJUnitPlatform() {
    includeTags("slow")
  }
}

但是我有很多不同的标签,我不希望每个标签都有一个任务。或者更糟糕的是,对所有排列都有一项任务。

另一种可能性是将自定义属性传递给这样的任务

tasks.withType(Test::class.java).configureEach {
  val includeTagsList = System.getProperty("includeTags", "")!!.split(",")
          .map { it.trim() }
          .filter { it.isNotBlank() }
  if (includeTagsList.isNotEmpty()) {
    includeTags(*includeTagsList.toTypedArray())
  }
}

【问题讨论】:

    标签: gradle junit5


    【解决方案1】:

    我上次检查时,Gradle 没有内置支持通过命令行配置 JUnit 平台包含和排除标记,因此您必须采用第二种方法。

    但是...不需要拆分、映射和过滤标签:只需使用 标签表达式https://junit.org/junit5/docs/current/user-guide/#running-tests-tag-expressions

    【讨论】:

      【解决方案2】:

      您可以创建一个单独的任务并选择是要运行该任务还是跳过它。 例如在 build.gradle 中添加这段代码:

      def slowTests= tasks.register("slowTests", Test) {
          useJUnitPlatform {
              includeTags "slow"
          }
      }
      

      现在,如果您只想运行慢速测试:

      ./gradlew clean build -x test slowTests
      

      【讨论】:

      • 我使用这个答案的前提只是修改了我的构建中的测试配置,它就像一个魅力。 OP 将从定义单独的任务中受益,但这适用于支持 useJUnitPlatform 的最新 Gradle 版本的任何测试任务。
      猜你喜欢
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2016-02-19
      相关资源
      最近更新 更多