Невозможно протестировать базу данных ROOM с потоками из-за задержек.Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Невозможно протестировать базу данных ROOM с потоками из-за задержек.

Сообщение Гость »


Я пытаюсь разработать для себя простое приложение для инвентаризации и использую базу данных ROOM с Flow в качестве типа возвращаемого значения для запросов, поэтому при обновлении базы данных запрос автоматически выдает мой список элементов инвентаря, а пользовательский интерфейс обновляется автоматически.
в DAO:

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

@Query("SELECT * FROM inventoryitem ORDER BY favourite = 0, count = 0")
fun getInventory(): Flow
и в блоке init() ViewModel:

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

init {
viewModelScope.launch(Dispatchers.IO) {
database.inventoryDao().getInventory().collect {
inventory.value = it
}
}
}
и инвентарь отображается в пользовательском интерфейсе, поэтому всякий раз, когда я обновляю базу данных ROOM, пользовательский интерфейс обновляется автоматически. Он работает отлично.
Я пытаюсь написать простой тест вставки для моей модели представления, который проверяет, будет ли при вставке нового элемента в базу данных мой инвентарь обновляться сам:

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

@Test
fun simpleInsertTest() = runTest {
viewModel.addInventoryItem(testItems[0])
assertEquals(viewModel.inventory.value, listOf(testItems[0]))
}

This test only passes if I add a sleep(200L) inbetween the two test lines, I am guessing because the ROOM insertion and the flow collection takes some time, and the test code does not wait for it with the assertion.
Is there any better way to wait for the new emission other than using this approach?
Thanks in advance


Источник: https://stackoverflow.com/questions/781 ... the-delays
Ответить

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

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

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

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

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