SuperAPI AI 工具集

controlling-the-test-clock

测试与质量

查看项目

更新于 10-16 03:04

技能介绍

用途:在 Compose 测试中手动驱动测试时钟,控制重组、动画与 LaunchedEffect 的推进。适用于询问 advanceTimeBy 的实际行为、帧计数、迁移到 v2 测试规则后需显式推进时钟等场景;目标是确定性动画测试或等待空闲状态时,应改用其他技能。

主要能力:MainTestClock 提供 currentTime(测试时钟毫秒,非墙钟)、scheduler(共享的 TestCoroutineScheduler)、autoAdvance(默认 true,框架在 waitForIdle/waitUntil 时自动推进;false 时仅显式调用推进)、advanceTimeByFrame()(恰好一帧,Android/Desktop 为 16ms)、advanceTimeBy(milliseconds, ignoreFrameDuration=false)(默认向上取整到帧时长倍数)、advanceTimeUntil(timeoutMillis=1000, condition)(逐帧推进至条件为真,超时抛 ComposeTimeoutException),以及 AbstractMainTestClock 上的 runCurrent()(不推进时钟、执行当前到期任务)。

必要用法:用 advanceTimeByFrame() 表示恰好一帧;需要已知动画时长用 advanceTimeBy(durationMillis=300);需要亚帧步进用 advanceTimeBy(milliseconds=8, ignoreFrameDuration=true);等待 Compose 状态条件用 advanceTimeUntil。动画测试需在 setContent 后先调用一次 advanceTimeByFrame() 作为启动帧,再推进时长。在 v2 规则(StandardTestDispatcher)下修改状态后、断言前需调用 advanceTimeByFrame()、advanceTimeBy(0) 或 runCurrent() 以排空排队任务。

限制:currentTime 仅表示测试时钟时间,不能与 System.currentTimeMillis() 比较;advanceTimeBy 小于 16ms 会向上取整,除非设置 ignoreFrameDuration=true;advanceTimeUntil 只适用于 Compose 快照系统中的条件,不能用于 Job.isCompleted、OkHttp 回调等外部条件;不要将 MainTestClock 与 MonotonicFrameClock 混淆;推荐使用 v2 入口点,v1 形式已标记为弃用警告。具体安装命令、版本号及官方文档细节暂未提供。