我有一个具有多个模块的项目。其中一个模块是kotlin多平台。我正在尝试使用Kotest 4.1.1为它添加单元测试。此版本发布在存储库mavenCentral()中,我可以在使用java库插件的模块中很好地使用此版本。但在多平台模块中使用Kotest 4.1.1时,每次尝试同步都会失败:
Could not resolve io.kotest:kotest-runner-junit5-jvm:4.1.1.我不明白为什么会这样。这个错误肯定是由于使用kotlin多平台插件的模块造成的,因为同一项目中使用常规kotlin jvm插件的不同模块和相同版本的kotest可以很好地同步。因此,gradle绝对有能力在已定义的存储库中找到版本,并使用kotest 4.1.1。
因此(毫不奇怪),io.kotest.xxx内容不在多平台模块中commonTest的测试类路径中,因此单元测试类不能导入kotest包。
我希望在JVM运行的单元测试中使用kotest (使用junit5)来测试多平台代码。但这是我第一次尝试多平台,所以一切都是可疑的:-)
下面的代码片段是来自多平台模块的build.gradle.kts的sourceSets代码。如果注释部分保持原样,gradle同步很好,但commonTest中的源代码当然看不到kotest。如果删除注释,则会出现错误
sourceSets {
commonMain {
dependencies {
implementation(kotlin("stdlib-common"))
}
}
/*
commonTest {
dependencies {
implementation(Kotest.framework)
}
}
*/
}下面是在两个模块中使用的Kotest.framework val的值:
object Kotest {
const val version = "4.1.1"
const val framework = "io.kotest:kotest-runner-junit5-jvm:$version"
const val assertions = "io.kotest:kotest-assertions-core-jvm:$version"
const val propertyTest = "io.kotest:kotest-property-jvm:$version"
}在Android Studio中使用kotlin多平台插件时,有人使用过kotest 4.1.1吗?任何关于如何进一步诊断这一问题的想法都将不胜感激。先谢谢你...
配置: Android studio 4.0 Gradle 6.5.1 Kotlin 1.3.72
发布于 2021-02-27 06:27:07
所讨论的配置的问题是,仅限JVM的工件(io.kotest:kotest-runner-junit5-jvm)在多平台commonTest部分中显示为依赖项。这是行不通的,因为公共部分不仅涵盖了JVM目标,而且还涵盖了其他(JS,本机)(参见the multiplatform doc)。
因此,Junit5运行器应该只进入部分。公共部分可以包括用于所有目标的工件。请参阅Kotest的Quick Start文档(在每个部分中选择最右侧的选项卡(“多平台”))。
以下是当前使用kotest 4.4.1的build.gradle.kts脚本中的相关部分:
val kotestVersion = "4.4.1"
kotlin {
jvm("backend") {
compilations.all {
kotlinOptions.useIR = true
}
withJava()
}
js("frontend", LEGACY) {
browser {
binaries.executable()
testTask {
useKarma {
useChromeHeadless()
webpackConfig.cssSupport.enabled = true
}
}
}
}
sourceSets {
val commonTest by getting {
dependencies {
implementation("io.kotest:kotest-framework-engine:$kotestVersion")
implementation("io.kotest:kotest-assertions-core:$kotestVersion")
implementation("io.kotest:kotest-property:$kotestVersion")
}
}
val backendTest by getting {
dependencies {
implementation("io.kotest:kotest-runner-junit5:$kotestVersion")
}
}
}
}
tasks {
// Tests
withType<Test> {
useJUnitPlatform()
}
}注意:上面的例子对JVM和JS目标使用了backend和frontend名称。如果您坚持使用默认名称,那么backendTest源集将被称为jvmTest。
https://stackoverflow.com/questions/62732289
复制相似问题