如何对gradle任务进行单元测试?

Mon*_*ika 8 unit-testing gradle gradle-task

我想测试我的 build.gradle 脚本的逻辑。
脚本摘录如下:

(...other tasks and methods...)
def readCustomerFile(File file) {
    def schema = <prepare schema>
    def report = schema.validate(JsonLoader.fromFile(file))
    if (!report.success) {
        throw new GradleException("File is not valid! " + report.toString())
    }
    return new groovy.json.JsonSlurper().parse(file)
}

task readFiles {
    mustRunAfter 'prepareCustomerProject'
    doLast {
        if (System.env.CUSTOMER_FILE_OVERRIDE) {
            project.ext.customerFileData = readCustomerFile(System.env.CUSTOMER_FILE_OVERRIDE)
        }
        else if (customerFile.exists()) {
            project.ext.customerFileData = readCustomerFile(customerFile)
        }
        else {
            throw new GradleException("Customer File is not provided! It is expected to be in CUSTOMER_FILE_OVERRIDE variable or in ${customerFile}")
        }
    }
}
(...other tasks and methods...)
Run Code Online (Sandbox Code Playgroud)

我想测试方法和任务本身。
“prepareProject”任务的执行时间相当长,但在“真实”设置中,不仅需要设置上述任务所需的属性,而且还需要设置属性。
对于测试,我只想设置运行 readFiles 任务并验证结果,确保项目上的属性正确设置或引发异常。

我已经研究了 gradle 测试套件,但这不是我需要的,因为我无法找到任何可以让我检查项目的东西。
我已经看过Guide for Test Gradle Scripts,但是这篇文章很旧,不能解决我的需求/问题。我还查看了 gradle 文档使用 TestKit 测试构建逻辑,但是看起来 GradleRunner 似乎没有提供任何真正的检查或项目准备能力。
另外,它会让我们使用 jUnit,有效地添加整个类结构,仅用于测试目的。不干净且难以维护。谷歌搜索 gradle + test + task 和其他变体找到了大量运行 xUnit 测试的方法,但这不是我需要的。

总结一下,我需要的是:

  • 分离地测试 gradle 任务和 build.gradle 中的方法(测试套件将运行任务及其所有依赖项,我不想要这个)
  • 在测试运行之前准备项目(测试套件似乎不允许这样做)
  • 验证任务/方法输出

有人成功做到这一点吗?
或者我以错误的方式处理这个问题?
我对 gradle 相当陌生,正在寻找好的选项来测试我的构建脚本。