如何在单元测试中运行自定义gradle任务?

问题描述 投票:0回答:1

我需要运行gradle任务以测试单元测试中的基本功能:

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

public class IwillfailyouPluginTest {
    @Test
    public void applyPlugin() {
        final Project project = ProjectBuilder.builder().build();
        project.getPlugins().apply(IwillfailyouPlugin.class);
        project.task("iwillfailyou").// what method should I run?
    }
}

但是我找不到运行它的方法。请帮助我

unit-testing gradle gradle-plugin
1个回答
0
投票

我的理解是,ProjectBuilder更适合单元测试。因此,根据您所拥有的,您只需要断言一个名为iwillfailyou的任务已经存在,具有某种类型并且具有正确的配置。

public class IwillfailyouPluginTest {

    @Test
    public void applyPlugin() {
        final Project project = ProjectBuilder.builder().build();
        project.getPlugins().apply(IwillfailyouPlugin.class);

        assertTrue(project.getTasks().getNames().contains("iwillfailyou"));

        MyCustomTaskType iwillfailyou = project.getTasks().getByName("iwillfailyou");

        assertEquals(123, iwillfailyou.getSomeConfig())
    }

}

看起来您正在尝试测试自定义任务的行为/功能。对于这种测试,您可以使用TestKit

import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.io.FileWriter;
import java.nio.file.Files;

import org.gradle.testkit.runner.GradleRunner;
import org.gradle.testkit.runner.BuildResult;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;


class IwillfailyouPluginFunctionalTest {

    @Test
    void canRunTask() throws IOException {
        // Setup the test build
        File projectDir = new File("build/functionalTest");
        Files.createDirectories(projectDir.toPath());
        writeString(new File(projectDir, "settings.gradle"), "");
        writeString(new File(projectDir, "build.gradle"), "plugins {" + "  id('i.will.fail.you')" + "}");

        // Run the build
        GradleRunner runner = GradleRunner.create();
        runner.forwardOutput();
        runner.withPluginClasspath();
        runner.withArguments("iwillfailyou");
        runner.withProjectDir(projectDir);
        BuildResult result = runner.build();

        // Verify the result
        Assertions.assertTrue(result.getOutput().contains("someoutput from the iwillfailyou task"));
    }

    private void writeString(File file, String string) throws IOException {
        try (Writer writer = new FileWriter(file)) {
            writer.write(string);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.