How do I use the native JUnit 5 support in Gradle with the Kotlin DSL?

前端 未结 2 685
旧时难觅i
旧时难觅i 2021-02-18 18:38

I want to use the built-in JUnit 5 with the Gradle Kotlin DSL, because during build I get this warning:

WARNING: The junit-platform-gradle-plugin is deprecated a         


        
2条回答
  •  余生分开走
    2021-02-18 19:38

    [Edit april 2019] As Pedro has found, three months after I asked this question Gradle actually created a user guide for the Kotlin DSL which can be visited at https://docs.gradle.org/current/userguide/kotlin_dsl.html

    They also added a migration guide from Groovy to Kotlin at https://guides.gradle.org/migrating-build-logic-from-groovy-to-kotlin/

    Answer:

    The syntax you ask for is

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

    which I figured out from this example file from the Kotlin DSL GitHub, or you can use

    tasks.withType {
        useJUnitPlatform()
    }
    

    which is used in the this official userguide which was created a couple of months after this answer was written (thanks to Pedro's answer for noting this).

    But in any case you actually are still using the buildscript block, which is a bit deprecated itself, use the new plugins DSL instead (docs). New build.gradle.kts becomes

    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()
        }
    }
    

    (Since the Gradle Kotlin DSL has almost no documentation at all except a few (undocumented) example files on GitHub, I'm documenting a few common examples here.)

    (Complete example project at GitHub, self-promotion...)

提交回复
热议问题