小编vvg*_*vvg的帖子

如何使用 Mockk 模拟 android 房间 withTransaction 方法

我正在尝试为我的业务逻辑进行一些单元测试。我有存储库,我将响应中的一些数据保存到房间数据库(2.1.0-rc01)。在单个事务中将数据保存到具有不同 dao 的不同表中。代码简化:

项目库

suspend fun saveItems(response: Response) {
    val items = response.items.map { it.toLocalItem() }
    val subItems = response.items.flatMap { item ->
            item.subItems.map { it.toLocal(item.id) }
        }

    db.withTransaction {
        db.itemDao().deleteAll()
        db.itemDao().insertAll(items)
        db.subItemDao().insertAll(subItems)
    }
}
Run Code Online (Sandbox Code Playgroud)

对于单元测试,我使用 Mockk 库。如何使用Transaction方法模拟房间?withTransaction 声明为

suspend fun <R> RoomDatabase.withTransaction(block: suspend () -> R): R
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写测试

@MockK
private lateinit var database: AppDatabase
@MockK
private lateinit var itemDao: ItemDao
@MockK
private lateinit var subItemDao: SubItemDao


@Test
fun checkSaveItems() = runBlocking {
    repository = ItemRepository(database)
    coEvery { database.itemDao() } …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-room mockk kotlin-coroutines

2
推荐指数
1
解决办法
1402
查看次数

标签 统计

android ×1

android-room ×1

kotlin ×1

kotlin-coroutines ×1

mockk ×1