如何使用 Gradle Kotlin DSL 运行 kotlintest 测试?
How to run kotlintest tests using the Gradle Kotlin DSL?
我想要什么?
我想 运行 我的测试使用 kotlintest,我通过单击测试 class 旁边的图标成功地 运行 从 IntelliJ 中安装它们。
我的项目中也有 JUnit 5 测试。
我现在开始使用 Gradle Kotlin DSL,并且我设法 运行 Gradle 执行 JUnit 5 任务的任务 check
。
问题是什么?
kotlintest测试不是运行!它似乎没有被 Gradle 发现,因为失败的测试让 Gradle 任务成功。所以,
How to run kotlintest tests using the Gradle Kotlin DSL while also using JUnit 5?
我尝试了什么?
本质上是问题的旧版本,但由于使用不同的技术已经过时:JUnit 4 和 Gradle 而不是 Gradle Kotlin DSL。
我能找到的所有其他问题都是针对 JUnit 4 或 .
项目设置
我正在使用 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 完成项目。
自 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
(在 IntelliJ 中的 Gradle 工具 window 右侧)或者,在 IntelliJ 中,单击装订线图标 运行 只有一个特定的测试或一组测试。
类似于@PhPirate 的回答,要将 KotlinTest 3.0.x 与 gradle 一起使用,您需要。
- 为 junit 5(也称为 junit 平台)添加 gradle 插件
- 将 gradle junit 插件添加到构建脚本的类路径中
- 将 KotlinTest junit5 runner 添加到您的测试依赖项中。
前两个步骤对于任何使用 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 sample repo,其中有一个使用 KotlinTest 配置的简单 gradle 项目。
对于更新版本的 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,我通过单击测试 class 旁边的图标成功地 运行 从 IntelliJ 中安装它们。
我的项目中也有 JUnit 5 测试。
我现在开始使用 Gradle Kotlin DSL,并且我设法 运行 Gradle 执行 JUnit 5 任务的任务 check
。
问题是什么?
kotlintest测试不是运行!它似乎没有被 Gradle 发现,因为失败的测试让 Gradle 任务成功。所以,
How to run kotlintest tests using the Gradle Kotlin DSL while also using 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 完成项目。
自 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
(在 IntelliJ 中的 Gradle 工具 window 右侧)或者,在 IntelliJ 中,单击装订线图标 运行 只有一个特定的测试或一组测试。
类似于@PhPirate 的回答,要将 KotlinTest 3.0.x 与 gradle 一起使用,您需要。
- 为 junit 5(也称为 junit 平台)添加 gradle 插件
- 将 gradle junit 插件添加到构建脚本的类路径中
- 将 KotlinTest junit5 runner 添加到您的测试依赖项中。
前两个步骤对于任何使用 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 sample repo,其中有一个使用 KotlinTest 配置的简单 gradle 项目。
对于更新版本的 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")
}