gpt4 book ai didi

gradle - 在单元测试中以编程方式调用 gradle 任务图

转载 作者:行者123 更新时间:2023-12-04 01:04:13 24 4
gpt4 key购买 nike

我正在为 gradle 编写自定义插件,作为单元测试的一部分,我想调用我的任务,但在执行它的先决任务时。

不幸的是,实际的插件是一个内部项目,所以我不能确定确切的来源,但我准备了一个单元测试来演示这个问题:

package toy

import org.gradle.api.Project
import org.gradle.testfixtures.ProjectBuilder
import org.junit.Test

class ToyTasksTest {

boolean task1Run = false
boolean task2Run = false

@Test
public void taskDependencies(){


Project p = ProjectBuilder.builder().build()

p.task("task1") << {
p.logger.info("task1 running")
task1Run = true
}

def task2 = p.task("task2", dependsOn: 'task1') << {
p.logger.info("task2 running")
task2Run = true
}
task2.execute() // <--- what magic do I need here instead of .execute()

assert task2Run == true
assert task1Run == true
}
}

输出是:
Assertion failed: 

assert task2Run == true
| |
false false

项目是 available on github如果您想快速运行测试。

另一种说法而不是写作:
task2.execute()

我想运行相当于:
gradle task2

在单元测试中。

最佳答案

在我看来,您试图在这里获得的更多是集成测试而不是单元测试。 Gradle 团队成员过去曾向我建议,在编写插件和任务时,您想要做的是将尽可能多的/有意义的任务从您的任务中分离到 POJO 中并对其进行单元测试。对于 Gradle 为您和管道所做的所有其他事情,例如执行任务图、测试增量任务功能等,您可能希望进行绝对较慢的集成测试,这就是您希望尽可能多地进行单元测试的原因。

唯一的问题是 Gradle 目前不提供用于编写​​这些集成测试的工具集。有一个design spec for that但目前如果你需要一个解决方案,你仍然需要手工制作一个解决方案。

你可以看看我用的 here但请记住,它有一些类路径问题,这就是为什么 this line是必要的。

我最近发现的另一个使用 GradleConnector 的解决方案的示例可以在 here 中找到。 .

关于gradle - 在单元测试中以编程方式调用 gradle 任务图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16264966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com