在 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_version
为 1.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
执行,因为公共模块可能包含 expect
ed 声明,这些声明应该使用 actual
关键字在每个平台上实现,这也没有意义直接在通用模块中调试。
相反,为了这样的目的,要调试的测试必须放在特定的平台模块中,出于我的目的,我选择了Android模块,然后才能执行和调试。
正如我所提到的,这种方法是必要的,因为在 Android 模块中,expect
ed 结构实际上被 actual
实现所取代。
【讨论】:
以上是关于在 IntelliJ 中运行多平台 Kotlin 测试会产生 No JDK specified 错误的主要内容,如果未能解决你的问题,请参考以下文章
从 ktor 提供 kotlin 多平台 javascript