将coroutinesKotlinVersion更新到1.7.1后,在使用UnconfinedTestDispatcher()创建MainCoroutineRule时遇到了这些问题
Could not initialize class kotlinx.coroutines.test.TestCoroutineScheduler
java.lang.NoClassDefFoundError: Could not initialize class kotlinx.coroutines.test.TestCoroutineScheduler
at kotlinx.coroutines.test.TestCoroutineDispatchersKt.UnconfinedTestDispatcher(TestCoroutineDispatchers.kt:87)
at kotlinx.coroutines.test.TestCoroutineDispatchersKt.UnconfinedTestDispatcher$default(TestCoroutineDispatchers.kt:83)
at net.example.cellfish.MainCoroutineRule.<init>(MainCoroutineRule.kt:12)
at net.example.cellfish.search.viewmodel.SearchTransactionHistoryViewModelTest.<init>(SearchTransactionHistoryViewModelTest.kt:49)
如果我将版本降级到1.6.4,测试用例似乎工作正常。能够初始化MainCoroutineRule。
供参考-
@OptIn(ExperimentalCoroutinesApi::class)
class MainCoroutineRule constructor(
val testDispatcher: TestDispatcher = UnconfinedTestDispatcher()
) : TestWatcher() {
override fun starting(description: Description) {
super.starting(description)
Dispatchers.setMain(testDispatcher)
}
override fun finished(description: Description) {
super.finished(description)
Dispatchers.resetMain()
}
}
Kotlin协同程序的扩展
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.1"
1条答案
按热度按时间yduiuuwa1#
所以发现内部
kotlinx-coroutines-test:1.7.1
正在尝试使用kotlin-stdlib:1.8.10
。但是由于我们的用例,我们强制任何基于Kotlin的库使用1.7.20,因此使kotlinx-coroutines-test:1.7.1
也使用kotlin-stdlib:1.7.20
。它似乎是它的一些兼容性问题(向后兼容性)与kotlinx-coroutines-test:1.7.1
的旧Kotlin版本。