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

时间:2018-01-05 06:55:21

标签: testing gradle api-design

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

gradle -Dtest.single=VeryCriticalTestX test

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

gradle testCritical

不用担心考试的名字。这也允许我在不破坏Jenkins构建的情况下随时更改名称。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

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")
    }
  }
})