【发布时间】:2019-02-19 08:18:16
【问题描述】:
我是第一次使用协程,在 ViewModel 上测试我的工作时遇到了麻烦。
测试失败,
Wanted but not invoked:
observer.onChanged(<Capturing argument>);
测试如下:
val androidVersioningMock: Versioning.AndroidVersioning = mock {
on { required } doAnswer { "3.3.6" }
}
val versioningMock: Versioning = mock {
on { android } doAnswer { androidVersioningMock }
}
whenever(networkManager.getAppVersionAsync()).thenReturn(GlobalScope.async { versioningMock })
runBlocking {
updateVersionModel =
UpdateViewModel(application, coroutineDispatcherProvider).apply {
updateLiveData.observeForever(stateObserver)
}
verify(stateObserver).onChanged(stateCaptor.capture())
assertTrue(stateCaptor.lastValue is UpdateState.NoUpdate)
assertEquals(UpdateState.NoUpdate, stateCaptor.lastValue)
}
我用
嘲笑了coroutineDispatcherProvider
@ExperimentalCoroutinesApi
override val coroutineDispatcherProvider = mock<CoroutineDispatcherProvider> {
on { main } doAnswer { TestCoroutineContext() }
on { io } doAnswer { TestCoroutineContext() }
}
在我的 ViewModel 中,失败的方法是
private suspend fun getUpdateVersion(): Versioning =
withContext(coroutineDispatcherProvider.io) {
networkManager.getAppVersionAsync().await()
}
执行如下:
launch {
val versioningModel = getUpdateVersion()
...
}
我不是在嘲弄什么,还是没有做某事?提前致谢!
【问题讨论】:
标签: android kotlin kotlinx.coroutines android-viewmodel