第 58 课2026.09.21
观察延迟任务在两个测试调度步骤后的状态。
第 58 课:对比runCurrent与advanceUntilIdle
- 日期:2026-09-21
- 课程序号:第 58 课
- 知识点:对比runCurrent与advanceUntilIdle
用途或适用场景
观察延迟任务在两个测试调度步骤后的状态。
核心概念
runCurrent 只执行当前已到期任务;advanceUntilIdle 继续推进虚拟时间直到空闲。
最小代码或操作示例
text
@OptIn(ExperimentalCoroutinesApi::class)
@Test
fun comparesSchedulerSteps() = runTest {
var done = false
launch { delay(1_000); done = true }
runCurrent()
assertFalse(done)
advanceUntilIdle()
assertTrue(done)
}3~5 分钟练习
把 delay 改为 2_000 再运行。
参考答案
两个断言仍通过,因为第二步会推进虚拟时间。
与上一课的联系
沿用第 57 课的 runTest、延迟任务与 advanceUntilIdle();本课只在其前增加 runCurrent() 和中间状态断言;完成练习后下一课可用 advanceTimeBy 只推进指定的虚拟时长。
时效校验
时效校验:2026-09-24(当前 Kotlin 2.4.20、kotlinx-coroutines-test 1.11.0;runCurrent 与 advanceUntilIdle 均标注 ExperimentalCoroutinesApi,未标注废弃,示例已显式 opt-in)。