如何使用 Gradle 和 IntelliJ 在 Kotlin 多平台项目中配置 JUnit 5?
How to configure JUnit 5 in a Kotlin multiplatform project using Gradle and IntelliJ?
JUnit 4(工作)
IntelliJ IDEA 2018.2.3(社区版)中的 Kotlin 多平台模板在项目的 JVM 部分依赖于 build.gradle
中的 JUnit 4.12:
plugins {
id 'kotlin-platform-jvm' version '1.2.61'
}
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
expectedBy project(":TestMulti-common")
testCompile "junit:junit:4.12"
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
sourceCompatibility = "1.8"
使用此模板,我可以将测试添加到项目的公共部分,并且 测试可被 IntelliJ 识别:'Run' 图标显示在空白处源文件和测试的数量可以通过上下文菜单 运行。
JUnit 5(测试未在 IntelliJ 中正确识别)
如何使用 JUnit 5 实现类似的设置?
值得注意的是,我使用的是 Gradle 4.10(一些较旧的示例使用 junit-platform-gradle-plugin
which has been deprecated since Gradle 4.6)。有关如何设置的文档已过时且稀缺:
- 如上所示,IntelliJ 中内置的默认项目模板未使用 JUnit 5。
- JUnit 团队 provides examples, but not for Kotlin multiplatform。
当我尝试为项目 based on the JUnit 5 Gradle example 的 JVM 部分设置 build.gradle
时,我可以 运行 使用 Gradle,但是 IntelliJ 似乎无法识别我的测试。
plugins {
id 'kotlin-platform-jvm' version '1.2.61'
}
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
expectedBy project(":TestMulti-common")
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit5"
testCompile('org.junit.jupiter:junit-jupiter-api:5.3.1')
testCompile('org.junit.jupiter:junit-jupiter-params:5.3.1')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.3.1')
}
test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
}
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
sourceCompatibility = "1.8"
奇怪的是,在 JVM 项目上 运行ning gradle test
时,有时测试结果会出现在 IntelliJ 的测试结果中,但是当重新运行ning 测试消息时 "Test events were not received"出现了。页边空白处的 'Run' 图标从不出现在源文件中,上下文菜单中的测试选项也从不出现。
其他人似乎也有类似的问题,但不清楚这些问题是 same/related 还是已经解决:
- Junit 5 and Gradle 4.6 check task shows "Test events were not received"
- junit5 tests are not shown in test view
- No "Run" icon on the left for tests in common part of a multi-platform project
- Kotlin 多平台项目运行 IDEA 常用模块测试
许多不同的版本、过时的文档和类似问题使得很难找到有关此问题的更多信息。
正如我在以下 YouTrack 问题中所述,这是 IntelliJ 中的错误:IntelliJ does not recognize JUnit 5 tests in Kotlin multiplatform project。
在最新版本中,现在可以使用了。我尝试使用 Kotlin 1.3.71、IntelliJ 插件 1.3.71-release-IJ2019.3-1 和 JUnit 5.6.0。
在我的例子中 IntelliJ IDE一个升级禁用的 JUnit 插件,所以我需要再次启用它(需要 IDE 重启):
JUnit 4(工作)
IntelliJ IDEA 2018.2.3(社区版)中的 Kotlin 多平台模板在项目的 JVM 部分依赖于 build.gradle
中的 JUnit 4.12:
plugins {
id 'kotlin-platform-jvm' version '1.2.61'
}
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
expectedBy project(":TestMulti-common")
testCompile "junit:junit:4.12"
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
sourceCompatibility = "1.8"
使用此模板,我可以将测试添加到项目的公共部分,并且 测试可被 IntelliJ 识别:'Run' 图标显示在空白处源文件和测试的数量可以通过上下文菜单 运行。
JUnit 5(测试未在 IntelliJ 中正确识别)
如何使用 JUnit 5 实现类似的设置?
值得注意的是,我使用的是 Gradle 4.10(一些较旧的示例使用 junit-platform-gradle-plugin
which has been deprecated since Gradle 4.6)。有关如何设置的文档已过时且稀缺:
- 如上所示,IntelliJ 中内置的默认项目模板未使用 JUnit 5。
- JUnit 团队 provides examples, but not for Kotlin multiplatform。
当我尝试为项目 based on the JUnit 5 Gradle example 的 JVM 部分设置 build.gradle
时,我可以 运行 使用 Gradle,但是 IntelliJ 似乎无法识别我的测试。
plugins {
id 'kotlin-platform-jvm' version '1.2.61'
}
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
expectedBy project(":TestMulti-common")
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit5"
testCompile('org.junit.jupiter:junit-jupiter-api:5.3.1')
testCompile('org.junit.jupiter:junit-jupiter-params:5.3.1')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.3.1')
}
test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
}
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
sourceCompatibility = "1.8"
奇怪的是,在 JVM 项目上 运行ning gradle test
时,有时测试结果会出现在 IntelliJ 的测试结果中,但是当重新运行ning 测试消息时 "Test events were not received"出现了。页边空白处的 'Run' 图标从不出现在源文件中,上下文菜单中的测试选项也从不出现。
其他人似乎也有类似的问题,但不清楚这些问题是 same/related 还是已经解决:
- Junit 5 and Gradle 4.6 check task shows "Test events were not received"
- junit5 tests are not shown in test view
- No "Run" icon on the left for tests in common part of a multi-platform project
- Kotlin 多平台项目运行 IDEA 常用模块测试
许多不同的版本、过时的文档和类似问题使得很难找到有关此问题的更多信息。
正如我在以下 YouTrack 问题中所述,这是 IntelliJ 中的错误:IntelliJ does not recognize JUnit 5 tests in Kotlin multiplatform project。
在最新版本中,现在可以使用了。我尝试使用 Kotlin 1.3.71、IntelliJ 插件 1.3.71-release-IJ2019.3-1 和 JUnit 5.6.0。
在我的例子中 IntelliJ IDE一个升级禁用的 JUnit 插件,所以我需要再次启用它(需要 IDE 重启):