2. 开发环境搭建
开发环境是 Compose UI 自动化测试的起点,也是后续所有章节的基础。本章以 Android Studio 为核心工具,覆盖从 SDK 配置、Gradle 依赖管理到模拟器/物理设备准备的全流程,并引入 Compose 测试库的核心依赖。完成本章配置后,你将获得一个可直接编写并运行 Compose 测试用例的最小工程。
2.1 环境全景
整个开发环境分为四个层次:
- 基础层:JDK 17+、Android SDK(API 33+)、Android Studio Hedgehog 或更高版本。
- 构建层:Gradle 8.2+、AGP 8.2+、Kotlin 1.9+。
- 测试框架层:JUnit 4/5、Compose UI Test、Espresso 可选。
- 运行层:模拟器(Android Virtual Device)或已启用开发者选项的物理设备。
下图概括了各层之间的关系与配置入口:
2.2 Android Studio 配置要点
打开 Android Studio 后,通过 Settings → Languages & Frameworks → Android SDK 确认以下组件已安装:
| 组件 | 最低版本/要求 | 用途 |
|---|---|---|
| Android SDK Platform | API 33 (Android 13) | 编译与运行测试目标 |
| Android SDK Build-Tools | 34.0.0 | 构建工具链 |
| Intel HAXM / Windows Hypervisor | 最新 | 模拟器加速 |
| Android Emulator | 32.1.15+ | 运行模拟器实例 |
提示:若使用 Apple Silicon Mac,请安装 ARM 版本的模拟器系统镜像,并确保 Android Studio 为 Hedgehog 或更新版本,以获得原生性能支持。
2.3 Gradle 依赖配置
在模块级 build.gradle.kts 中添加 Compose 测试所需的依赖。以下是一个标准的配置模板(注意版本号应与项目所用 Compose BOM 一致):
// 最顶层 build.gradle.kts (Project)
plugins {
id("com.android.application") version "8.2.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.22" apply false
}
// 模块级 build.gradle.kts (Module :app)
android {
compileSdk = 34
defaultConfig {
minSdk = 24
targetSdk = 34
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.10"
}
}
dependencies {
// Compose BOM 统一版本
val composeBom = platform("androidx.compose:compose-bom:2024.02.00")
implementation(composeBom)
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-tooling")
implementation("androidx.compose.foundation:foundation")
// Compose UI Test 核心库 (androidTest)
androidTestImplementation(composeBom)
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
// 测试辅助库
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation("androidx.test:rules:1.5.0")
// Debug 模式下可用的 UI 测试工具
debugImplementation("androidx.compose.ui:ui-test-manifest")
}
常见错误:忘记添加
testInstrumentationRunner 会导致运行测试时提示 “No instrumentation runner found”。请确保 defaultConfig 块中包含该配置。另外,ui-test-manifest 仅在 debug 变体下有效,若发布版本运行测试会报错。
2.4 模拟器与物理设备准备
2.4.1 模拟器 (AVD)
通过 Android Studio 的 Device Manager 创建一台模拟器:
- 点击工具栏的 “Device Manager” 图标,或选择
Tools → Device Manager。 - 点击 “Create device”,选择硬件配置(推荐 Pixel 6 或 API 33+ 的通用设备)。
- 选择系统镜像:建议使用 API 34 (x86_64) 并勾选 “Use Google Play” 如果测试需要 Google 服务。
- 分配足够的存储空间(至少 2GB 内部存储)并确认。
性能优化:启用 Quick Boot 可大幅缩短模拟器启动时间。首次创建后关闭模拟器即保存快照,后续启动仅需 5-10 秒。
2.4.2 物理设备
将物理手机连接至电脑,并执行以下步骤:
- 开启 开发者选项:设置 → 关于手机 → 连续点击 “版本号” 7 次。
- 开启 USB 调试:开发者选项 → USB 调试。
- 连接 USB 线后,在设备上允许 “允许 USB 调试?” 弹窗。
- 命令行验证连接:
adb devices应显示设备序列号及 “device” 状态。
调试技巧:若
adb devices 显示 “unauthorized”,请重新插拔 USB 线并确保设备已解锁。某些 OEM 机型(如小米、华为)需要额外在开发者选项中关闭 “MIUI 优化” 或 “启用监控”。
2.5 Compose 测试库引入检查与常见问题
完成依赖引入后,可以通过 Gradle Sync 确认无红色提示。若同步成功,在 app/src/androidTest/java/ 目录下创建第一个测试文件:
package com.example.composetest
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import org.junit.Rule
import org.junit.Test
class ExampleComposeTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun myTest() {
composeTestRule.setContent {
// 此处放置一个简单的 Composable
androidx.compose.material3.Text("Hello, World!")
}
composeTestRule.onNodeWithText("Hello, World!").assertExists()
}
}
右键测试方法选择 “Run” 即可在连接的设备上执行。
2.6 常见错误速查表
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| java.lang.NoClassDefFoundError: androidx.compose.ui.test.junit4.ComposeTestRule | 缺少 ui-test-junit4 依赖 | 在 androidTestImplementation 中添加该依赖并同步 |
| Could not find method createComposeRule() | Compose BOM 版本过低或未引入 | 检查 BOM 版本 ≥ 2024.01.00 |
| adb: device unauthorized | 物理设备未授权 | 重新插拔并确认设备亮屏,必要时撤销 USB 调试授权后重试 |
| Emulator fails to boot with "The emulator process for AVD was killed" | 缺少 HAXM 或内存不足 | 安装 Intel HAXM(Windows)或使用 ARM 镜像;增加模拟器内存 |
| Gradle sync failed: Could not resolve androidx.compose:compose-bom | 网络问题或 jcenter() 已停用 | 在 settings.gradle.kts 中添加 google() 和 mavenCentral() |
2.7 部署与验证
配置完成后,建议运行一个空测试验证整体链路:
- 选择一个模拟器或物理设备(确保设备状态为 “online”)。
- 在 Android Studio 中打开 ExampleComposeTest,点击类左侧的绿色运行箭头选择 “Run”。
- 观察 Gradle Console 输出,确认测试通过(绿色条)。
稳定性建议:如果模拟器运行缓慢,请降低屏幕分辨率(如 1080p)并分配至少 2 个 CPU 核心。物理设备建议使用 USB 3.0 端口以保证数据传输速度。