我试图捕获挂起的 lambda/协程并调用它,但模拟调用只是挂起。
@Test
fun test() = coroutinesTestRule.testDispatcher.runBlockingTest {
coEvery { db.withTransaction(captureCoroutine<suspend () -> Unit>()) } answers {
coroutine<suspend () -> Unit>().coInvoke()
}
}
如果我做错了什么或者这是不可能的,有什么提示或技巧吗?
我相信你需要使用
coAnswers
:
@Test
fun test() = coroutinesTestRule.testDispatcher.runBlockingTest {
coEvery {
db.withTransaction(captureCoroutine<suspend () -> Unit>())
} coAnswers {
coroutine<suspend () -> Unit>().coInvoke()
}
}
我发现唯一有效的是添加此功能:
@Before
fun setup() {
mockkStatic("androidx.room.RoomDatabaseKt")
coEvery { mockDatabase.withTransaction(captureCoroutine<suspend () -> Unit>()) } coAnswers {
coroutine<suspend () -> Unit>().captured.invoke()
}
}