单元测试 是针对程序中的最小可测试单元(函数、方法、或 Compose 中的 @Composable 组件)
进行正确性验证的自动化测试手段。在 Android Compose 世界中,一个 Composable 函数、一个 ViewModel 的逻辑、
一个状态计算函数,都可以作为“单元”来测试。
单元测试通常由开发者编写,运行快速(毫秒级),且不依赖外部环境(网络、数据库、文件系统)。
在 Compose 中,我们可以使用 createComposeRule() 来测试 Composable 的渲染与交互。
在 Compose 项目中,UI 单元测试能直接验证组件状态、交互事件、文本显示等,极大提升界面稳定性。
| 维度 | 🧪 单元测试 | 🔗 集成测试 |
|---|---|---|
| 测试范围 | 单个函数 / Composable / 类 | 多个模块 / 组件协作 |
| 运行速度 | 极快 (毫秒级) | 较慢 (秒级~分钟级) |
| 依赖隔离 | 完全隔离 (mock / stub) | 真实依赖或半隔离 |
| 故障定位 | 精准到单元 | 跨组件,定位稍复杂 |
| 维护成本 | 低 (聚焦单一职责) | 中高 (环境搭建) |
| Compose 示例 | 测试 MyButton 点击后文本变化 |
测试导航 + 列表 + 详情页跳转 |
简单来说:单元测试保证“零件”合格,集成测试保证“组装”正常。 两者相辅相成,测试金字塔中单元测试占据最大比例(约 70%)。
下面是一个极简的 Composable 单元测试示例(使用 createComposeRule):
@RunWith(AndroidJUnit4::class)
class GreetingTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun greeting_displaysCorrectText() {
// 设置 Composable
composeTestRule.setContent {
Greeting(name = "小智")
}
// 验证文本是否存在
composeTestRule
.onNodeWithText("你好, 小智!")
.assertExists()
}
}
通过 onNodeWithText 查找组件,assertExists 确认渲染正确。
这就是单元测试在 Compose 中的典型用法 —— 快速、可靠、聚焦。
createComposeRule 是单元测试的基石。