如何在 Gradle 中为单个测试创建快捷任务?

How can I create a shortcut task for a single test in Gradle?

在Gradle中,我可以运行从命令行进行单个测试,如下所示:

gradle -Dtest.single=VeryCriticalTestX test

VeryCriticalTestX 经常单独执行,我想为我的开发人员提供一个更具可读性和灵活性的 API。理想情况下,他们只需要 运行

gradle testCritical

不用担心测试的名称。这也将允许我在不破坏 Jenkins 构建的情况下随着时间的推移更改名称。

我该如何实现?

Gradle 的 Test- 任务可以配置为仅包括与给定名称模式匹配的测试。您可以按如下方式创建新任务testCritical

task testCritical(type: Test) {
    group = 'verification'
    description = 'Runs a very critical test'

    outputs.upToDateWhen { false }

    include('**/VeryCriticalTestX.class')
}

因此,将 VeryCriticalTestX 重命名为其他名称不会破坏其他人的命令或 Jenkins 工作。但是,存在有人通过重命名 VeryCriticalTestX 而不调整任务配置而意外禁用此任务的风险。这可以通过以下 TaskExecutionListener:

来防止
// verify that testCritical is not skipped unexpectedly due to a renamed classfile
// we detect this using Gradle's NO-SOURCE TaskState
gradle.addListener(new TaskExecutionListener() {
  void beforeExecute(Task task) {}
  void afterExecute(Task task, TaskState state) {
    if (checkJooqEnumBindings.equals(task) && state.getNoSource()) {
       throw new GradleException("testCritical did not run because it couldn't find VeryCriticalTestX")
    }
  }
})