如何使用Gradle Kotlin DSL运行Kotlintest测试



我想要什么?

我想使用Kotlintest运行测试,然后通过单击测试类旁边的图标来成功地从Intellij运行它们。我的项目中也有5个测试。我现在开始使用Gradle Kotlin DSL,我设法运行了执行Junit 5任务的Gradle任务check

有什么问题?

不运行Kotlintest测试!Gradle并没有发现它似乎是一个失败的测试使Gradle任务成功。所以,

如何使用Gradle Kotlin DSL运行Kotlintest测试,同时还使用Junit 5?

我尝试了什么?

如何使用Gradle进行Kotlintest测试?本质上是该问题的旧版本,但自使用不同的技术以来已经过时了:Junit 4和Gradle代替Gradle Kotlin DSL。我可以找到的所有其他问题是针对Junit 4,或者没有Kotlintest的Junit 5。

项目设置

我正在使用Gradle 4.6。我的测试是

import io.kotlintest.matchers.exactly
import io.kotlintest.matchers.shouldBe
import io.kotlintest.specs.FunSpec
class KotlinTest: FunSpec() {
    init {
        testCalculate()
    }
    /** This failing test will not fail the Gradle check. */
    fun testCalculate() = test("one plus one is two") {
        (1+1).toDouble() shouldBe exactly(42.0)
    }
}

我的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 = "mypackage"
version = "0.0"
// JUnit 5
buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.junit.platform:junit-platform-gradle-plugin:1.1.0")
    }
}
apply {
    plugin("org.junit.platform.gradle.plugin")
}
// Kotlin configuration.
plugins {
    application
    kotlin("jvm") version "1.2.30"
    java // Required by at least JUnit.
}
application {
    mainClassName = "mypackage.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.1.0")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.1.0")
    testRuntime("org.junit.platform:junit-platform-console:1.1.0")
    // Kotlintests are not run anyway when using JUnit 5 as well.
    testCompile("io.kotlintest:kotlintest:2.0.7")
}
repositories {
    jcenter()
}

PS在GitHub上完成项目。

带有Kotlin Gradle插件的最新版本,补充这一点就足够了:

dependencies {
    testImplementation(kotlin("test-junit5"))
    testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine", "5.5.2")
}
tasks {
    test {
        useJUnitPlatform()
    }
}

这是假设您要坚持kotlin.test的接口。例如,一个小测试看起来像这样:

import kotlin.test.Test
import kotlin.test.assertEquals
class SomeTest {
    @Test
    fun testBar() {
        assertEquals(5, 6)
    }
}

如果您想从IDEA中运行测试,则需要添加一些其他依赖项:

dependencies {
    // ...
    testCompileOnly("org.junit.jupiter", "junit-jupiter-api", "5.5.2")
    testCompileOnly("org.junit.jupiter", "junit-jupiter-params", "5.5.2")
}

由于Kotlintest版本3,因此支持Junit 5!只需在您的build.gradle.kts中替换

testCompile("io.kotlintest:kotlintest:2.0.7")

testCompile("io.kotlintest:kotlintest-core:3.0.2")
testCompile("io.kotlintest:kotlintest-assertions:3.0.2")
testCompile("io.kotlintest:kotlintest-runner-junit5:3.0.2")

在Changelog中阐明。

然后,要么运行Gradle任务check(在右侧的Gradle工具窗口中的Intellij中(,或者在Intellij中,单击"天沟"图标仅运行特定的测试或一组测试。

类似于 @phpirate的答案,使用kotlintest 3.0.x与gradle一起使用,您需要。

  1. 添加Junit 5的Gradle插件(也称为Junit平台(
  2. 将Gradle Junit插件添加到您的buildscript的类路径
  3. 将Kotlintest Junit5跑步者添加到您的测试依赖项中。

前两个步骤对于使用Junit平台的任何项目都很常见 - 包括Junit5本身,Kotlintest,Spek等。

基本的gradle配置看起来像这样:

apply plugin: 'org.junit.platform.gradle.plugin'
buildscript {
    ext.kotlin_version = '1.2.31'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.junit.platform:junit-platform-gradle-plugin:1.1.0"
    }
}
dependencies {
    testCompile 'io.kotlintest:kotlintest-runner-junit5:3.0.2'
}

您也可以在此处克隆Gradle样本回购,该回购具有一个简单的Gradle项目,该项目配置为Kotlintest。

相关内容

  • 没有找到相关文章

最新更新