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

标签 unit-testing gradle gradle-plugin

我需要运行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?
    }
}

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

最佳答案

我的理解是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);
        }
    }
}

关于unit-testing - 如何在单元测试中运行自定义gradle任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62282412/

相关文章:

gradle - 如何在Gradle中复制一些buildscript类路径JAR但排除其他的?

gradle - 如何使用 Kotlin DSL 和插件在 Gradle 中创建一个胖 Jar

android - 在运行时更改Gradle依赖项中的代码

javascript - 揭示测试的模块替代方案或变体

java - 如何运行用 cucumber-jvm 和 gradle 标签过滤的测试?

c# - 使用 Single 作为 Assert 是一种不好的做法吗?

java - 使用 Gradle 编译后运行带有依赖项的 java 程序

gradle - 将自定义任务集成到多项目构建的生命周期中

python - py.test 在类下找不到测试

C#/ Visual Studio : production and test code placement