Как проверить существующий gradle.build с помощью gradletestkit? - PullRequest
0 голосов
/ 30 июня 2019

Я хочу загрузить файл build.gradle в тестовый набор Gradle и использовать Junit 5, чтобы я мог протестировать скрипт сборки внутри build.gradle

Пример в руководстве показывает только то, как вы пишете и тестируете код и с Junit4

Мой тестовый класс выглядит так

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

import java.io.File;
import java.io.IOException;
import java.util.Collections;

import java.nio.file.Path
import java.nio.file.Paths

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

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


import static org.gradle.testkit.runner.TaskOutcome.*;

public class BuildLogicFunctionalTest {

    private Project project;
    private ProjectBuilder projectbuild;
    @TempDir 
    private File projectfile;



    @Test
    public void testHelloWorldTask() throws IOException {

        projectbuild = ProjectBuilder.builder();
        project = projectbuild.build();

        BuildResult result = GradleRunner.create()
            .withProjectDir(project.getBuildDir())
            .withArguments("helloWorld")
            .build();

        assertTrue(result.getOutput().contains("Hello world!"));
        assertEquals(SUCCESS, result.task(":helloWorld").getOutcome());
    }
}

Сценарий сборки Testkit выглядит следующим образом

plugins {
    id 'groovy'
}


test {
    useJUnitPlatform()
    testLogging {
        events "passed", "skipped", "failed"
    }
}

repositories {
    mavenCentral()
}

dependencies { 
    testImplementation gradleTestKit()
    implemenation localGroovy()
    implementation gradleApi()
    testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.2'
    testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.4.2'
}

wrapper {
    gradleVersion = '5.0'
}

Файл build.gradle, который я хочу протестировать, выглядит следующим образом

task helloWorld {
        doLast {
            println 'Hello world!'
        }
}

Как загрузить build.gradle в программу?

Как должен выглядеть код GradleRunner для проверки задачи helloWorl?

Ответы [ 2 ]

1 голос
/ 30 июня 2019

TestKit требует, чтобы вы поместили файлы конфигурации Gradle в заданную директорию проекта.В этом примере теста вы увидите , что для теста создаются новые build.gradle и settings.gradle.

Кроме этого, этот инструмент предназначен в первую очередь для тестирования пользовательских задач и плагинов Gradle.,Я чувствую, что вы пытаетесь использовать его для проверки вашего корневого build.gradle скрипта.Это рискованно, потому что механизм тестирования может изменить содержимое каталога, переданного в withProjectDir(...), а также изменить или удалить ваши источники.

Я рекомендую вам следовать этому руководству Gradle , чтобы узнать больше о тестированииВаша логика сборки.

0 голосов
/ 30 июня 2019

Решение выглядит так:

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

import java.io.File;
import java.io.IOException;
import java.util.Collections;

import java.nio.file.Path
import java.nio.file.Paths

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.gradle.api.Project;
import org.gradle.testfixtures.ProjectBuilder;
import org.gradle.api.tasks.TaskContainer;


import static org.gradle.testkit.runner.TaskOutcome.*;

public class BuildLogicFunctionalTest {




    @Test
    public void testHelloWorldTask() throws IOException {
        File projectdir = new File("/Users/stein/Development/ReactSpringBooTutorial/todoapp")



        BuildResult result = GradleRunner.create()
        .withProjectDir(projectdir. getAbsoluteFile())
        .withArguments("helloWorld")
        .build();



        assertTrue(result.getOutput().contains("Hello world!"));
        assertEquals(SUCCESS, result.task(":helloWorld").getOutcome());
    }
...