我正在编写自定义 Gradle 插件。我正在为我想在插件中创建的每个功能编写测试。 我正在使用 java 编写插件。
我在继承自 Plugin 接口(interface)的 apply
方法中创建我的任务。
我对项目构建生命周期的 afterEvaluate 阶段可用的任务有很多依赖性,但不会更早(至少,不是在 apply
阶段)并且我无法控制这些外部任务的定义方式。
所以我定义了这些任务的依赖关系
project.afterEvaluate((project) -> {
customTask.dependsOn(project.getTasks().getByName("nameOfTheTask"));
});
在测试代码中,我使用 JUnit 和 gradle 测试套件进行了以下设置:
@BeforeClass
public static void initializeProject() {
project = ProjectBuilder.builder().build();
customPlugin = new CustomPlugin();
customPlugin.apply(project);
}
我可以通过使用
检索我的任务来检查测试用例中的常规(即在 afterEvaluate block 之外)依赖项project.getTasks().findByName("customTask").getDependsOn()
然而,这对于为特定生命周期定义的依赖项或更一般地作为闭包定义的依赖项是不可能的。
有什么方法可以测试是否为某个生命周期设置了正确的依赖项?或者有没有办法检索注册这样一个代码块的内容?
附言我可以使用转换、反射、阴影、修改等,但我真的很想知道这是否可以测试,或者也许我毕竟采用了错误的方法。谢谢!
最佳答案
我找不到执行此操作的正确/公共(public) api 方法,但是对于 gradle 4.3.1 这对我有用:
project.getTasksByName("tasks", false); //internally it calls project.evaluate()
在内部,该方法强制对项目进行评估,因此也调用了 afterEvaluate Hook 。
关于java - 编写Gradle插件时如何测试afterEvaluate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532971/