微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于 Kotlin 多平台移动设备的 Hamcrest 和 Mockk

如何解决用于 Kotlin 多平台移动设备的 Hamcrest 和 Mockk

我正在尝试在 KMM 项目的 shared 模块中编写测试。在共享模块的 build.gradle.kts 文件中,我有以下内容

sourceSets {
    val commonMain by getting
    val commonTest by getting {
        dependencies {
            implementation(kotlin("test-common"))
            implementation(kotlin("test-annotations-common"))


            //Todo: Hamcrest
            //implementation("junit:junit:4.12")
            //implementation("org.hamcrest:hamcrest-library:1.3")

            //Todo: Mockk
            //implementation("io.mockk:mockk:1.10.4")
        }
    }
    //...
}

我也试过:

implementation(kotlin("[library]"))

结果相同:IDE 不再识别这些测试,我无法运行它们。

解决方法

不幸的是,没有一个支持 K/N (AFAIK) 的模拟库。

这里是 Mockk's K/NMockk's K/JS 问题以供将来参考,或者您也可以查看 Touchlab's Karmok

对于 Hamcrest,请参阅他们的问题 here

,

我收到了 KMM 团队的回复 - 我想我会把它放在这里以供参考

您只能使用支持公共源集中所有声明目标的多平台依赖项,因为这将用于编译所有目标。 Junit 不是一个多平台库,它是 JVM,所以你应该将它添加到你的 jvm 目标源集(androidMain,如果你声明了 android() 目标)。检查这个项目:例如https://github.com/Kotlin/kmm-sample/blob/master/shared/build.gradle.kts

同样的问题与其他依赖项有关 - 它们不是多平台的,因此您不能在公共源集中使用它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。