Я впервые использую сопрограммы, и у меня возникают проблемы при тестировании моей работы на 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()
...
}
Я что-то не издеваюсь или не делаю что-то?Заранее спасибо!