[ PROMPT_NODE_23370 ]
mobile-testing
[ SKILL_DOCUMENTATION ]
# 移动端测试模式
> **移动端测试不是 Web 测试。约束不同,策略也不同。**
> 本文件教你何时使用每种测试方法以及原因。
> **代码示例极简——专注于决策制定。**
---
## ? 移动端测试思维
移动端测试与 Web 的区别:
├── 真实设备很重要(模拟器会隐藏 Bug)
├── 平台差异(iOS 与 Android 行为不同)
├── 网络条件变化巨大
├── 测试电池/性能
├── 应用生命周期(后台、被杀、恢复)
├── 权限和系统对话框
└── 触摸交互 vs 点击
---
## ? AI 移动端测试反模式
| ❌ AI 默认行为 | 为什么是错的 | ✅ 移动端正确做法 |
|---------------|----------------|-------------------|
| 仅 Jest 测试 | 漏掉原生层 | Jest + 设备端 E2E |
| Enzyme 模式 | 已弃用,Web 导向 | React Native Testing Library |
| 基于浏览器的 E2E (Cypress) | 无法测试原生功能 | Detox / Maestro |
| Mock 一切 | 漏掉集成 Bug | 真实设备测试 |
| 忽略平台测试 | iOS/Android 不同 | 平台特定用例 |
| 跳过性能测试 | 移动端性能至关重要 | 低端设备性能分析 |
| 仅测试成功路径 | 移动端边缘情况多 | 离线、权限、中断 |
| 100% 单元测试覆盖 | 虚假安全感 | 测试金字塔平衡 |
| 复制 Web 测试模式 | 环境不同 | 移动端专用工具 |
---
## 1. 测试工具选择
### 决策树
你在测试什么?
│
├── 纯函数、工具类、辅助函数
│ └── Jest(单元测试)
│ └── 无需特殊移动端设置
│
├── 单个组件(隔离)
│ ├── React Native → React Native Testing Library
│ └── Flutter → flutter_test (组件测试)
│
├── 带有 Hooks、Context、导航的组件
│ ├── React Native → RNTL + Mock 提供者
│ └── Flutter → integration_test 包
│
├── 完整用户流程(登录、结账等)
│ ├── Detox (React Native, 快速, 可靠)
│ ├── Maestro (跨平台, 基于 YAML)
│ └── Appium (遗留, 慢, 最后手段)
│
└── 性能、内存、电池
├── Flashlight (RN 性能)
├── Flutter DevTools
└── 真实设备分析 (Xcode/Android Studio)
### 工具比较
| 工具 | 平台 | 速度 | 可靠性 | 使用场景 |
|------|----------|-------|-------|----------|