用途:在设备或模拟器上运行 JVM 单元测试无法覆盖的测试,如 Compose/Espresso UI、导航、Intent 与权限流程。纯用例逻辑仍建议放在 test/ 中,避免过度仪器化。
主要能力与关注点:使用 androidTest 源集;Compose Test 通过 createAndroidComposeRule 与 semantics 断言;XML 视图用 Espresso;应用使用 Hilt 时用 HiltAndroidRule 提供测试依赖注入;跨应用或系统交互才考虑 UI Automator。优先覆盖关键屏 happy path(登录、结账、权限)、empty/error 可见状态、返回栈导航、基础无障碍(contentDescription)与 UI 回归缺陷。
目录结构与用法:src/androidTest/kotlin 下放置 fakes/、screens/(robots 或 page objects)以及每个流程一个测试类。使用项目的 testInstrumentationRunner(Hilt 时用 Hilt runner)。Compose 可用 composeRule.setContent 包裹主题与屏幕,用 onNodeWithTag("submit").performClick() 点击、onNodeWithText("Salvo").assertIsDisplayed() 断言;testTag 应稳定,避免仅依赖易变的 i18n 文本;用 waitUntil/waitForIdle 代替 Thread.sleep;通过 factory 或 Hilt 测试模块注入 fake ViewModel/Repository。Espresso 用 onView(withId(...)).perform(click()),若项目已配置 OkHttp Idling 可用。不要在同一方法里混用 Espresso 与 Compose,除非项目已有桥接。
隔离与稳定性:仅 debug/test 构建,避免真实 staging 网络;用 GrantPermissionRule 或 CI 中的 ADB 授权;测试间重置 DataStore/Room(内存数据库或清理);在 CI runner 关闭动画(ANIMATOR_DURATION_SCALE=0)。异步无 idle、动画、时间/网络是常见 flaky 来源;重跑需有证据,优先修 idle,避免 Thread.sleep;若流水线支持可失败截图。
反模式:仪器化所有屏幕、按坐标或像素断言、PR 中走真实网络、随意给所有节点加 testTag、重复 JVM 已覆盖的 ViewModel 测试。
关联:单元测试见 android-unit-testing,Compose 见 jetpack-compose,应用见 android-development,协程 fake 见 kotlin-coroutines。完成标准为关键流程无 sleep 覆盖、使用 fakes/Hilt 测试且无共享后端、semantics 稳定、connectedDebugAndroidTest(或 CI flavor)在范围内通过。资料未提供安装命令、价格或更多平台细节。