在 IntelliJ 中运行多平台 Kotlin 测试会产生 No JDK specified 错误

Posted

技术标签:

【中文标题】在 IntelliJ 中运行多平台 Kotlin 测试会产生 No JDK specified 错误【英文标题】:Running multi platform Kotlin test in IntelliJ produces No JDK specified error 【发布时间】:2018-12-05 01:48:22 【问题描述】:

我在多平台 Kotlin 项目的公共模块中有几个测试。当我使用 gradle 执行这些测试时,例如./gradlew :android:test,他们都通过并运行测试。

我现在遇到了一个更复杂的问题,我想在 IntelliJ 中调试实际测试。不幸的是,在 IntelliJ 中选择调试选项后,我收到 No JDK specified 错误。

我正在使用以下依赖项进行测试:

testImplementation "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlin_version"
testImplementation "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"

$kotlin_version1.2.41

常用模块设置如下:

SDKs 部分也能正确识别 JDK:

我尝试将 Module SDK 从 Kotlin SDK 更改为 java,但是 IntelliJ 然后希望我需要 jUnit 来执行测试,如果可能的话,我不希望这样做。

有没有办法让调试器在 IntelliJ 中运行 Kotlin 代码?

【问题讨论】:

问题在 YouTrack 上报告:youtrack.jetbrains.com/issue/KT-23884 @y.bedrov 谢谢你的链接,但是我找到了另一个我认为应该是正确方法的解决方案。进一步的解释在我发布的答案中。 【参考方案1】:

找到了解决办法。

就像单独在公共模块中使用 Gradle 执行测试没有意义一样,例如./gradlew :common:test 并且测试需要针对特定​​平台 ./gradlew :android:test 执行,因为公共模块可能包含 expected 声明,这些声明应该使用 actual 关键字在每个平台上实现,这也没有意义直接在通用模块中调试。

相反,为了这样的目的,要调试的测试必须放在特定的平台模块中,出于我的目的,我选择了Android模块,然后才能执行和调试。

正如我所提到的,这种方法是必要的,因为在 Android 模块中,expected 结构实际上被 actual 实现所取代。

【讨论】:

以上是关于在 IntelliJ 中运行多平台 Kotlin 测试会产生 No JDK specified 错误的主要内容,如果未能解决你的问题,请参考以下文章

从 ktor 提供 kotlin 多平台 javascript

在 kotlin 多平台项目中运行测试

Kotlin 多平台项目在 IDEA 中运行通用模块测试

在 Intellij 中更新 Kotlin 后在 Eclipse 中运行应用程序时出错

无法在 Kotlin 多平台项目中调试 iOS 应用程序

从 kotlin 多平台项目创建 fat jar