如何使用Gradle和IntelliJ在Kotlin多平台项目中配置JUnit5? JUnit 4(工作)

如何使用Gradle和IntelliJ在Kotlin多平台项目中配置JUnit5? JUnit 4(工作),gradle,intellij-idea,kotlin,junit5,kotlin-multiplatform,Gradle,Intellij Idea,Kotlin,Junit5,Kotlin Multiplatform,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" expec

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可以识别这些测试:源文件的空白处会显示一个“运行”图标,并且可以通过上下文菜单运行测试

JUnit 5(IntelliJ中未正确识别的测试) 如何使用JUnit 5实现类似的设置?

值得注意的是,我使用的是Gradle4.10(一些较老的示例使用它)。关于如何设置的文档已经过时且缺乏:

  • 如上所示,IntelliJ中构建的默认项目模板不使用JUnit5
  • JUnit团队
当我尝试为项目的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项目上运行
gradle test
时,有时测试结果会出现在IntelliJ的测试结果中,但在重新运行测试时,会显示消息“test events was not received”(测试事件未收到)。边距中的“运行”图标从不出现在源文件中,上下文菜单中的测试选项也不会出现

其他人似乎也有类似的问题,但不清楚这些问题是否相同/相关,或者是否已经解决,因为:


许多不同的版本、过时的文档和类似的问题使得很难找到有关此问题的更多信息。

正如我在以下YouTrack问题中所述,这是IntelliJ中的一个错误:


在最新的版本中,这一功能正在发挥作用。我试过使用Kotlin 1.3.71、IntelliJ插件1.3.71-release-IJ2019.3-1和JUnit 5.6.0。在我的例子中,IntelliJ IDEA升级禁用了JUnit插件,所以我需要再次启用它(需要重新启动IDE):


当我在Intellij IDEA Ultimate EAP上时。。。你能不能也试着用一下,看看这种特定的行为是否也存在?我不记得我在使用Junit5和Intellij时遇到过任何奇怪的行为。。。而我的
build.gradle
仅在以下方面有所不同:我没有
testCompile
而是
testImplementation
,我没有
testRuntime
而是
testRuntimeOnly
。剩下的就是same@Roland最初我也在使用
testImplementation
(因为我相信这是一种新的编写方式)。我只使用了
testCompile
,因为这是JUnit示例列出的内容(另一个过时文档的示例:()。两者都不起作用。不过你也有一个多平台项目吗?关于重新运行测试“不起作用”,这是因为任务是最新的,因为没有做任何更改。为了始终在IntelliJ中查看测试结果,我还ping了一些人。我将首先等待今晚的响应/睡眠,并可能会在@JetBrains打开一个新的错误问题明天,将我们学到的全部浓缩到一个bug报告中。至少在我这方面,我现在可以创建一个简单的重编程序,罪魁祸首是
org.jetbrains.kotlin:kotlin-test-junit5
。我检查了这与
org.jetbrains.kotlin:kotlin-test-junit
之间的源代码差异,但不知道这会如何影响IntelliJ的测试查找。发布了这个。