SuperAPI AI 工具集

testing-state-restoration

测试与质量

查看项目

更新于 10-16 02:31

技能介绍

用途:验证 Composable 中用 rememberSaveable 保存的状态(如 LazyListState、TextField 值、开关状态)能否在保存/恢复周期后正确还原,并可为保存/恢复类缺陷补回归测试。

主要能力:StateRestorationTester 会注入 LocalSaveableStateRegistry,快照注册的状态,丢弃组合后用快照重新组合。它不重启 Activity、不触发 Application.onCreate,序列化 Bundle 上限为 1 MB。

使用方式:需在 androidTestImplementation 引入 androidx.compose.ui:ui-test-junit4,并使用 ComposeContentTestRule(createComposeRule() 或 createAndroidComposeRule<A>()),不能用 createEmptyComposeRule()。用 StateRestorationTester(rule) 构造,必须调用 restorationTester.setContent { } 而非 rule.setContent { }。状态引用声明为可空 var 并在捕获后置 null,再调用 emulateSavedInstanceStateRestore(),最后在 runOnIdle 中断言相等。被测状态必须用 rememberSaveable,普通 remember 不会存活。

适用场景:单元测试中验证 rememberSaveable 往返、排查 emulateSavedInstanceStateRestore() 后状态未变或为 null、处理 Bundle 超过 1 MB 的异常。

限制:不覆盖 Activity 重建、配置变更或进程死亡路径,这些需用 Espresso ActivityScenario.recreate();ViewModel 的 SavedStateHandle 应使用 AndroidX ViewModel 测试工具;保存内容需远小于 1 MB,大数据应只保存 id 或键。