如何在 gradle cmd 中 include/exclude junit5 标签?

How to include/exclude junit5 tags in gradle cmd?

我想执行标记的 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 没有通过命令行配置 JUnit 平台包含和排除标记的内置支持,因此您必须采用第二种方法。

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

您可以创建一个单独的任务并选择要运行 任务还是跳过它。 例如在 build.gradle:

中添加此代码
def slowTests= tasks.register("slowTests", Test) {
    useJUnitPlatform {
        includeTags "slow"
    }
}

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

./gradlew clean build -x test slowTests