Hamcrest和Mockk forKotlin多平台移动的

bzzcjhmw  于 2023-05-07  发布在  Kotlin
关注(0)|答案(3)|浏览(153)

我尝试在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不再识别这些测试,我无法运行它们。

xpcnnkqh

xpcnnkqh1#

不幸的是,没有一个mocking库支持K/N(AFAIK)。
这里是Mockk's K/N和Mockk的K/JS问题,供将来参考,或者您也可以查看Touchlab's Karmok
关于Hamcrest,请参阅他们的问题here

编辑/更新

到2022年,上述答案不再成立。Mockk现在支持共享模块中的模拟。请在这里检查mockk.io添加以下依赖项,你应该是好的去
testImplementation "io.mockk:mockk-common:{version}"
模拟体验是无缝的,就像常规的Android单元测试用例一样。

exdqitrt

exdqitrt2#

我收到了KMM团队的回复-我想我会把它放在这里以供参考
您只能使用支持公共源集中所有声明目标的多平台依赖项,因为这可能会用于所有目标的编译。Junit不是一个多平台库,它是JVM,所以你应该将它添加到你的jvm目标源集(如果你声明了android()target,则为androidMain)。检查此项目:例如https://github.com/Kotlin/kmm-sample/blob/master/shared/build.gradle.kts
同样的问题涉及到其他依赖项--它们不是多平台的,所以你不能在一个公共源集中使用它们。

a6b3iqyw

a6b3iqyw3#

目前大多数mocking库都是仅支持JVM的-- mockkhamcrest
有一些Kotlin多平台模拟库使用基于KSP的代码生成,具有有限的模拟支持,但也与Kotlin/Native兼容:

相关问题