【发布时间】:2019-11-10 06:50:33
【问题描述】:
我在将 kotlin 协程测试框架 kotlinx.coroutines.test 与针对 Android(以及未来的 ios)的多平台项目集成时遇到了困难
我的通用代码严重依赖协程,但我无法测试它们(看起来测试库不在类路径中)
build.gradle 通用模块:
plugins {
id 'org.jetbrains.kotlin.multiplatform'
id 'com.android.library'
id 'kotlin-kapt'
}
android {
defaultConfig {
compileSdkVersion 28
javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true
}
lintOptions {
checkAllWarnings true
}
}
def coroutinesVersion = "1.3.0-M2"
def mockKVersion = "1.9.3"
kotlin {
targets {
fromPreset(presets.android, 'android')
}
sourceSets {
commonMain.dependencies {
//Kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" //used in Log implementation
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutinesVersion"
}
commonTest.dependencies {
//Kotlin
implementation "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlin_version"
//Coroutines testing
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion"
implementation "io.mockk:mockk-common:$mockKVersion"
}
androidMain.dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
}
androidTest.dependencies {
implementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
implementation "io.mockk:mockk:$mockKVersion"
}
}
}
/*
* Due to the current limitations, it requires that the Android target is created before the kapt dependencies are configured,
* which needs to be done in a top-level dependencies { ... } block rather than within Kotlin source sets dependencies.
*/
dependencies {
implementation 'javax.annotation:javax.annotation-api:1.3.2'
kapt 'com.google.auto.factory:auto-factory:1.0-beta6@jar'
compileOnly "com.google.auto.factory:auto-factory:1.0-beta6"
}
commonTest 源集中的示例测试:
package some.package.common.test
import kotlin.test.Test
import kotlin.test.assertTrue
class SomeTest {
@Test
fun `should pass`() {
//none of the kotlinx.coroutines.test content is available here (eg. runBlockingTest)
assertTrue { 2 + 2 == 4 }
}
}
【问题讨论】:
-
您好!也许您必须将
implementation更改为testImplementation,就像在 (README) 中一样?[github.com/Kotlin/kotlinx.coroutines/blob/master/… -
你好。似乎 testImplementation 关键字不适用于常见的依赖项。
标签: kotlin kotlin-coroutines kotlin-multiplatform