如何用gradle运行kotlintest测试?

时间:2017-07-21 07:12:45

标签: junit kotlin build.gradle junit-runner kotlintest

从Intellij开始,kotlintest测试运行得非常好,但是当我尝试使用gradle test task命令运行它们时,只找到并运行我的常规JUnit测试。

kotlintest代码:

import io.kotlintest.matchers.shouldBe
import io.kotlintest.specs.StringSpec

class HelloKotlinTest : StringSpec() {
    init {
        println("Start Kotlin UnitTest")

        "length should return size of string" {
            "hello".length shouldBe 5
        }
    }
}

的build.gradle:

apply plugin: 'org.junit.platform.gradle.plugin'

buildscript {
    ext.kotlinVersion = '1.1.3'
    ext.junitPlatformVersion = '1.0.0-M4'

    repositories {
        maven { url 'http://nexus.acompany.ch/content/groups/public' }
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        classpath "org.junit.platform:junit-platform-gradle-plugin:$junitPlatformVersion"
    }
}

sourceSets {
    main.kotlin.srcDirs += 'src/main/kotlin'
    test.kotlin.srcDirs += 'test/main/kotlin'
}

(...) 

dependencies {
    // Kotlin
    compile group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib-jre8', version: kotlinVersion

    // Kotlin Test
    testCompile group: 'io.kotlintest', name: 'kotlintest', version: kotlinTestVersion

    // JUnit 5
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: junitJupiterVersion
    testRuntime group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junitJupiterVersion
}

3 个答案:

答案 0 :(得分:2)

在KotlinTest 3.1.x中,您不再需要使用Junit4。它与JUnit 5完全兼容。因此,您的问题的答案是升级到3.1.x轨道。

您需要将useJUnitPlatform()添加到build.gradle中的测试块。

您需要将testCompile 'io.kotlintest:kotlintest-runner-junit5:3.1.9'添加到依赖项中。

例如。

dependencies {
    testCompile 'io.kotlintest:kotlintest-runner-junit5:3.1.9'
}

test {
    useJUnitPlatform()

    // show standard out and standard error of the test JVM(s) on the console
    testLogging.showStandardStreams = true

    testLogging {
        events "PASSED", "FAILED", "SKIPPED", "STANDARD_OUT", "STANDARD_ERROR"
    }
}

答案 1 :(得分:1)

"解决方案"是切换回JUnit 4.

kotlintest并没有考虑到JUnit 5的构建,也没有提供自己的junit-engine。

(注意:应该可以告诉JUnit 5使用JUnit 4引擎进行kotlintest。如果有人知道如何执行此操作,请在此处添加解决方案。)

答案 2 :(得分:0)

为了使用Junit5运行kotlintest测试,您需要使用KTestRunner。

<div id='canvas'>
</div>
<script src="https://d3js.org/d3.v4.min.js"></script>

例如,使用以下gradle配置。

@RunWith(KTestJUnitRunner::class)
class MyTest : FunSpec({
    test("A test") {
        1 + 1 shouldBe 2
    }
})