提问者:小点点

Hamcrest和Mockk用于静态编程语言多平台移动


我正在尝试在KMM项目的共享模块中编写测试。在共享模块的构建中。格拉德尔。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不再识别这些测试,我无法运行它们。


共2个答案

匿名用户

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

这是Mockk的K/N和Mockk的K/JS问题,供将来参考,或者您也可以查看Touchlab的Karmok

有关Hamcrest,请参见此处的问题

匿名用户

我从KMM团队那里得到了一个回复——我想我应该把它放在这里作为参考

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

同样的问题涉及到其他依赖项——它们不是多平台的,所以您不能在公共资源集中使用它们。