Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何对gradle任务进行单元测试?_Unit Testing_Gradle_Gradle Task - Fatal编程技术网

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

Unit testing 如何对gradle任务进行单元测试?,unit-testing,gradle,gradle-task,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 GradleEx

我想测试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...)
(…其他任务和方法…)
def readCustomerFile(文件){
定义架构=
def report=schema.validate(JsonLoader.fromFile(文件))
如果(!report.success){
抛出新的GradleException(“文件无效!”+report.toString())
}
返回新的groovy.json.JsonSlurper().parse(文件)
}
任务读取文件{
必须在“prepareCustomerProject”之后运行
多拉斯特{
if(System.env.CUSTOMER\u文件\u覆盖){
project.ext.customerFileData=readCustomerFile(System.env.CUSTOMER\u文件\u覆盖)
}
else if(customerFile.exists()){
project.ext.customerFileData=readCustomerFile(customerFile)
}
否则{
抛出新的GradleException(“未提供客户文件!该文件应位于客户文件\覆盖变量或${customerFile}”)中)
}
}
}
(…其他任务和方法…)
我想测试方法和任务本身。
“prepareProject”任务在执行过程中相当长,但在“real”设置中,不仅需要为上述任务设置必要的属性。
对于测试,我只想设置运行readFiles任务并验证结果,确保项目上的属性设置正确或引发异常

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

总而言之,我需要的是:

  • 分别测试build.gradle中的gradle任务和方法(测试工具包将运行任务及其所有依赖项,我不希望这样)
  • 在测试运行之前准备项目(测试套件似乎不允许这样做)
  • 验证任务/方法输出
有人成功地做到了吗?
还是我用错误的方式处理这个问题?

我是gradle的新手,正在寻找测试构建脚本的好方法。

这里是gradle文档,介绍如何为自定义任务编写测试:我不知道它如何适用于脚本中定义的任务。如果您创建一个任务类可能会更容易,文档中也对其进行了描述。正如前面的注释所暗示的,您可以隐式地或作为自定义插件在buildSrc文件夹中组织类似的逻辑。buildSrc文件夹定义了一个独立的gradle项目,因此您可以在其中添加一个build.gradle,其中包含您喜欢的任何依赖项和测试。否则,您可以自由定义一个新任务testReadFiles,该任务在readFiles之后运行并检查结果,或者定义一个使用一些参数调用readCustomerFile()并断言结果的任务。TestKit使用一个临时文件夹,允许您对该文件夹进行任何更改,因此不确定您错过了什么“项目准备能力”。我错过的是单独调用任务的能力。prepareCustomerProject任务正在做一些准备工作(特定于项目),这些准备工作相当长,不是此任务所需的全部,而是下游任务所需的。我希望能够设置readFiles任务所需的属性,并在没有任何依赖项的情况下运行它。