我如何使用 gradle 运行 kotlintest 进行测试?
How can I run kotlintest tests with gradle?
从 Intellij 启动时,kotlintest 测试 运行 非常好,但是当我尝试使用 gradle 测试任务命令对它们进行 运行 测试时,只找到了我的常规 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
}
"solution" 将切换回 JUnit 4。
kotlintest 在构建时并未考虑 JUnit 5,也不提供自己的 junit 引擎。
(注意:应该可以告诉 JUnit 5 将 JUnit 4 引擎用于 kotlintest。如果有人知道如何执行此操作,请在此处添加解决方案。)
为了 运行 使用 Junit5 进行 kotlintest 测试,您需要使用 KTestRunner。
@RunWith(KTestJUnitRunner::class)
class MyTest : FunSpec({
test("A test") {
1 + 1 shouldBe 2
}
})
以下面的gradle配置为例。
dependencies {
testCompile("io.kotlintest:kotlintest:${kotlinTestVersion}")
testCompile("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
}
在 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"
}
}
从 Intellij 启动时,kotlintest 测试 运行 非常好,但是当我尝试使用 gradle 测试任务命令对它们进行 运行 测试时,只找到了我的常规 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
}
"solution" 将切换回 JUnit 4。
kotlintest 在构建时并未考虑 JUnit 5,也不提供自己的 junit 引擎。
(注意:应该可以告诉 JUnit 5 将 JUnit 4 引擎用于 kotlintest。如果有人知道如何执行此操作,请在此处添加解决方案。)
为了 运行 使用 Junit5 进行 kotlintest 测试,您需要使用 KTestRunner。
@RunWith(KTestJUnitRunner::class)
class MyTest : FunSpec({
test("A test") {
1 + 1 shouldBe 2
}
})
以下面的gradle配置为例。
dependencies {
testCompile("io.kotlintest:kotlintest:${kotlinTestVersion}")
testCompile("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
}
在 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"
}
}