Как использовать встроенную поддержку JUnit 5 в Gradle с Kotlin DSL? - PullRequest
0 голосов
/ 02 мая 2018

Я хочу использовать встроенный JUnit 5 с Gradle Kotlin DSL, потому что во время сборки я получаю это предупреждение:

WARNING: The junit-platform-gradle-plugin is deprecated and will be discontinued in JUnit Platform 1.3.
Please use Gradle's native support for running tests on the JUnit Platform (requires Gradle 4.6 or higher):
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-gradle

что ссылки говорят мне поставить

test {
    useJUnitPlatform()
}

в моем build.gradle, но каков синтаксис для build.gradle.kts?

Мой текущий файл сборки

import org.gradle.api.plugins.ExtensionAware

import org.junit.platform.gradle.plugin.FiltersExtension
import org.junit.platform.gradle.plugin.EnginesExtension
import org.junit.platform.gradle.plugin.JUnitPlatformExtension

group = "com.example"
version = "0.0"

// JUnit 5
buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.junit.platform:junit-platform-gradle-plugin:1.2.0")
    }
}

apply {
    plugin("org.junit.platform.gradle.plugin")
}

// Kotlin configuration.
plugins {

    val kotlinVersion = "1.2.41"

    application
    kotlin("jvm") version kotlinVersion
    java // Required by at least JUnit.

    // Plugin which checks for dependency updates with help/dependencyUpdates task.
    id("com.github.ben-manes.versions") version "0.17.0"

    // Plugin which can update Gradle dependencies, use help/useLatestVersions
    id("se.patrikerdes.use-latest-versions") version "0.2.1"

}

application {
    mainClassName = "com.example.HelloWorld"
}

dependencies {
    compile(kotlin("stdlib"))
    // To "prevent strange errors".
    compile(kotlin("reflect"))
    // Kotlin reflection.
    compile(kotlin("test"))
    compile(kotlin("test-junit"))

    // JUnit 5
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.2.0")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.2.0")
    testRuntime("org.junit.platform:junit-platform-console:1.2.0")

    // Kotlintest
    testCompile("io.kotlintest:kotlintest-core:3.1.0-RC2")
    testCompile("io.kotlintest:kotlintest-assertions:3.1.0-RC2")
    testCompile("io.kotlintest:kotlintest-runner-junit5:3.1.0-RC2")

}

repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
}

(Ниже приведено несколько слов, потому что этот вопрос «в основном содержит код»). Я пытался найти документацию по настройке задач в Kotlin DSL, но не смог найти ни одной. В обычном Groovy вы можете просто написать имя задачи, а затем изменить вещи в блоке, но Kotlin DSL не распознает задачу как таковую, неразрешенную ссылку.

Кроме того, этот вопрос связан, но требует создания новых задач вместо настройки существующих: Как перезаписать задачу в gradle kotlin-dsl

Вот решение для обычного Gradle.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Добавляя поверх принятого ответа, также можно использовать типизированную конфигурацию задачи, такую ​​как:

tasks.withType<Test> {
    useJUnitPlatform()
}

Обновление:

Gradle документы для справки здесь . В частности Пример 19 , который имеет:

tasks.withType<JavaCompile> {
    options.isWarnings = true
    // ...
}
0 голосов
/ 02 мая 2018

[Изменить апрель 2019] Как Педро нашел , через три месяца после того, как я задал этот вопрос, Gradle фактически создал руководство пользователя для Kotlin DSL, которое можно посетить по адресу https://docs.gradle.org/current/userguide/kotlin_dsl.html

Они также добавили руководство по миграции с Groovy на Kotlin на https://guides.gradle.org/migrating-build-logic-from-groovy-to-kotlin/

Ответ:

Синтаксис, который вы запрашиваете:

tasks {
    // Use the built-in JUnit support of Gradle.
    "test"(Test::class) {
        useJUnitPlatform()
    }
}

который я выяснил из этого файла примера из GitHub Kotlin DSL.

но в любом случае вы все еще используете блок buildscript, который немного устарел, используйте вместо него новый plugins DSL ( docs ). Новый build.gradle.kts становится

group = "com.example"
version = "0.0"

plugins {

    val kotlinVersion = "1.2.41"

    application
    kotlin("jvm") version kotlinVersion
    java // Required by at least JUnit.

    // Plugin which checks for dependency updates with help/dependencyUpdates task.
    id("com.github.ben-manes.versions") version "0.17.0"

    // Plugin which can update Gradle dependencies, use help/useLatestVersions
    id("se.patrikerdes.use-latest-versions") version "0.2.1"
}

application {
    mainClassName = "com.example.HelloWorld"
}

dependencies {
    compile(kotlin("stdlib"))
    // To "prevent strange errors".
    compile(kotlin("reflect"))
    // Kotlin reflection.
    compile(kotlin("test"))
    compile(kotlin("test-junit"))

    // JUnit 5
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.2.0")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.2.0")
    testRuntime("org.junit.platform:junit-platform-console:1.2.0")

    // Kotlintest
    testCompile("io.kotlintest:kotlintest-core:3.1.0-RC2")
    testCompile("io.kotlintest:kotlintest-assertions:3.1.0-RC2")
    testCompile("io.kotlintest:kotlintest-runner-junit5:3.1.0-RC2")

}

repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
}

tasks {
    // Use the native JUnit support of Gradle.
    "test"(Test::class) {
        useJUnitPlatform()
    }
}

(Поскольку у Gradle Kotlin DSL практически нет документации, за исключением нескольких (недокументированных) файлов примеров на GitHub , я документирую несколько общих примеров здесь.)

(Полный пример проекта на GitHub , самореклама ...)

...