java - 编写Gradle插件时如何测试afterEvaluate

标签 java gradle tdd gradle-plugin

我正在编写自定义 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/

相关文章:

java - 实体没有定义主键属性 : JPA

Java:Linux 服务器上的数字签名与 Windows 客户端上的数字签名不同

java - 我将GWT依赖项添加到vaadin项目时无法启动tomcat

java - Gradle 无法构建具有 Docker 依赖项的 JAR

tdd - 在 TDD 中,您如何为本来就有副作用的代码编写测试?

c - 使用 ARM 供应商 HAL 进行测试驱动开发

java - 为什么在 Kotlin 类中实现 Cloneable 接口(interface)会导致 "error: no interface expected here"?

java - 如何在自定义 Spring Data JPA 存储库中注入(inject)配置

Groovy 编译错误 :Unrecognized Windows Sockets error

tdd - 测试驱动开发与自动定理证明