最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

android - Suspending Room operations don't advance in Kotlin test - Stack Overflow

programmeradmin4浏览0评论

For some reason, coroutines launched inside of a test performing Room operations don't execute (unless i call advanceUntilIdle hundreds of thousands of times). I use RobolectricTestRunner. Robolectric version: 4.14, Room: 2.6.1, Coroutines: 1.10.1

Entity

@Entity
internal data class DNDScheduleCalendarCriteriaEntity(
    @PrimaryKey(autoGenerate = true) val id: Long = 0,
    val likeName: String
)

DAO

@Dao
internal interface DNDScheduleCalendarCriteriaDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertCriteria(criteriaEntity: DNDScheduleCalendarCriteriaEntity)

    @Query("SELECT * FROM DNDScheduleCalendarCriteriaEntity LIMIT 1")
    fun criteriaFlow(): Flow<DNDScheduleCalendarCriteriaEntity?>
}

Database

@Database(entities = [DNDScheduleCalendarCriteriaEntity::class], version = 1)
internal abstract class DNDScheduleCalendarCriteriaDb: RoomDatabase() {
    abstract fun dao(): DNDScheduleCalendarCriteriaDAO
}

Test code

// inside of @Before
context = ApplicationProvider.getApplicationContext()
db = Room.inMemoryDatabaseBuilder(
        context,
        DNDScheduleCalendarCriteriaDb::class.java
    ).build()

@Test
fun test() = runTest(
    StandardTestDispatcher()
) {
    db.dao().insertCriteria(DNDScheduleCalendarCriteriaEntity(likeName = "like name event"))
    launch {
        // doesn't get printed
        println(db.dao().criteriaFlow().first())
    }
    runCurrent()
    advanceUntilIdle()
  }
发布评论

评论列表(0)

  1. 暂无评论