Тестирование Dispatcher IO и ViewModelScope в модульных тестахAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Тестирование Dispatcher IO и ViewModelScope в модульных тестах

Сообщение Anonymous »

Я пытаюсь протестировать код в своей модели представления. Я пытаюсь сделать два сетевых вызова с асинхронным диспетчером, но не понял, как это проверить. Это упрощенный пример того, что я по сути пытаюсь сделать:

Код: Выделить всё

// View Model Function

fun initialise() {
viewModelScope.launch(coroutineExceptionHandler) {
val accountDeferred = async(Dispatchers.IO) { accountModel.getAccounts() }
val contentDeferred = async(Dispatchers.IO) { contentModel.getContent() }
val account = accountDeferred.await()
val content = contentDeferred.await()

handleResult(account, content) // viewState is updated
}
}

// Unit Test
// Simplified

class Test {
@get:Rule
val coroutineRule = CoroutineTestRule(StandardTestDispatcher())

@Test
fun `This is the test`() {
runTest{
whenever(accountModel.getAccounts()).thenReturn(
Result.success( getAccountContent() , ReasonStatus.empty()))
whenever(contentModel.getContent()).thenReturn(
Result.success( getContent(), ReasonStatus.empty()))

// start view model
viewmodel = ViewModel(accountModel, contentModel)
runCurrent()

// In debugging mode, the variable viewState is set, before the two jobs in the viewmodel finish

val viewState = viewmodel.viewState.value

// check contents
assertNotEmpty(viewState.accounts)

// always fails since the network calls have not completed
}
}
}
Какие могут быть предложения, чтобы гарантировать, что два асинхронных ожидания выполняются до того, как другой код в блоке runTest будет выполнен первым надежным образом?


Подробнее здесь: https://stackoverflow.com/questions/786 ... unit-tests
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»