В прошлый раз, когда я написал тест для базы данных Room, я просто использовал runBlock
, и он сработал для меня ... Не могли бы вы взглянуть на этот образец и проверить, работает ли он и для вас ?
Изменить: Опс! Я пропустил эту часть ... Я попробовал это (в том же примере):
- Я определил фиктивную функцию в моем DAO, используя
@Transaction
@Transaction
suspend fun quickInsert(book: Book) {
save(book)
delete(book)
}
Думаю, это ключ к проблеме. Добавьте
setTransactionExecutor
в экземпляр своей базы данных.
appDatabase = Room.inMemoryDatabaseBuilder(
InstrumentationRegistry.getInstrumentation().context,
AppDatabase::class.java
).setTransactionExecutor(Executors.newSingleThreadExecutor())
.build()
Наконец, тест работал с использованием
runBlocking
@Test
fun dummyTest() = runBlocking {
val dao = appDatabase.bookDao();
val id = dummyBook.id
dao.quickInsert(dummyBook)
val book = dao.bookById(id).first()
assertNull(book)
}
См. этот вопрос .