用途:对已有 Jetpack Compose UI 测试文件或测试套件做端到端审查,输出可按严重级别排序的发现清单。适用于用户粘贴 *Test.kt 询问“有什么问题”、报告系统性 flaky、本地通过但 CI 失败、发布前审核测试套件,或从 v1 迁移到 v2 时排查可能失效的测试。不适用于修复单个失败断言、从零编写新测试,或评审生产 composable 的性能。
六阶段:1. Setup 正确性:检查 Gradle 依赖配置(ui-test-manifest 与 ui-test-junit4 的 configuration)、TestManifestGradleConfiguration lint、Rule 选择(createComposeRule/createAndroidComposeRule/createEmptyComposeRule)、自定义 Activity 声明、v1 与 v2 import、是否混用 Rule 与 runComposeUiTest、源集(src/test 与 src/androidTest)能力匹配。2. Finder 纪律:检查 onNodeWithTag/Text/ContentDescription 的使用比例、生产代码是否有对应 testTag、useUnmergedTree 用法、选择器链、是否重复实现已有 matcher。3. 断言强度:assertExists 与 assertIsDisplayed 的取舍、集合数量断言、bounds 与状态、文本断言 i18n、toggle/selectable 状态、Dp 容差。4. 操作正确性:performGesture 已废弃改用 performTouchInput、坐标系统、触摸 DSL 扩展、文本输入/替换/清空、performImeAction、多模态输入、LazyList 滚动 API。5. 时间与 idle:Thread.sleep 禁止(截图等 RenderThread 场景除外)、动画测试须在 setContent 前设 mainClock.autoAdvance = false、测试时钟与墙上时钟混用、测试线程直接改 state、v2 下 StandardTestDispatcher 的排队工作、waitUntil 超时默认 1000ms。6. 调试输出:失败时是否打印语义树、fetchSemanticsNode 使用、错误信息可读性、测试命名。
输出:以 Markdown 表格给出每条发现,列出 #、Phase、File:line、Severity(ERROR/WARN/NIT)、Finding、Routed skill。不做自动修复,报告交用户处理;结尾用简短文字点出最重要的三条发现与建议下一步运行的单个技能。
可用 grep 预扫 v1 import、ui-test-manifest 配置、finder 比例、performGesture、Thread.sleep、动画 API、离线程赋值等高信号问题。若 Phase 1 发现源集错误或混用 Rule 与 runComposeUiTest,应停止后续阶段,先路由到对应 setup 技能再重审。需要具备待审测试文件读取权限、模块 build.gradle.kts,以及自定义 Activity 时的 AndroidManifest.xml。