gpt4 book ai didi

gradle - 评估后测试自定义 Gradle 插件

转载 作者:行者123 更新时间:2023-12-03 04:10:17 25 4
gpt4 key购买 nike

我正在开发一个 Gradle 自定义插件,但我遇到了关于如何测试它的问题。

该插件创建一个扩展来接收配置,并在评估后 (project.afterEvaluate {) 创建一个具有接收到的配置的任务,这些值在任务上为 @Input

按照文档 https://docs.gradle.org/current/userguide/custom_plugins.html为插件创建测试,我使用以下内容创建项目并应用插件

@Before fun setup() {
project = ProjectBuilder.builder().build()
project.pluginManager.apply("my.plugin.name")

然后测试是否创建了扩展:

assertTrue(project.extensions.findByName("name") is MyConfigType)

并且任务已经创建:

assertTrue(project.tasks.findByName("mytask") is MyTaskType)

我遇到的问题是任务仅在 afterEvaluate 中创建,因此此测试失败。据我所知,它必须是 afterEvaluate 才能接收配置值。

所以我能看到我是否可以在测试力上对这个项目进行评估的唯一方法,但是如何?

是否有不同的方式来接收值?

最佳答案

我在 gradle 论坛上发布了我的类似问题并且能够解决问题: https://discuss.gradle.org/t/unit-test-plugins-afterevaulate/37437/3

显然 afterEvaluate 不是执行任务创建的最佳/正确位置。如果您的扩展程序中有一个 DomainObjectCollection 并且想要为集合中的每个元素创建一个任务,则应在 all-Callback 中完成任务创建。集合的:

final MyExtension extension = project.getExtensions().create("extension", MyExtension.class);
extension.configurations.all((c) -> {
// register task here
});

如果您在扩展中有简单的属性作为输入提供给任务,您应该使用惰性配置:

public class MyExtension { 
public final Property<String> property;
public final NamedDomainObjectContainer<Configuration> configurations;

@Inject
public MyExtension(final ObjectFactory objectFactory) {
property = objectFactory.property(String.class).convention("value");
configurations = objectFactory.domainObjectContainer(Configuration.class);
}
}

public abstract class MyTask extends DefaultTask {

@Input
private final Property<String> property = getProject().getObjects().property(String.class);

public Property<String> getProperty() {
return property;
}
}

应用方法:

public class MyPlugin implements Plugin<Project> {

@Override
public void apply(final Project aProject) {
final MyExtension extension = aProject.getExtensions().create("extension", MyExtension.class);
aProject.getTasks().register("myTask", MyTask.class).configure((t) -> {
t.getProperty().set(extension.property);
});
}
}

关于gradle - 评估后测试自定义 Gradle 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60989927/

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