Unit testing 如何对gradle任务进行单元测试?
我想测试build.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
脚本摘录如下:
(...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任务所需的属性,并在没有任何依赖项的情况下运行它。