ios-testing
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseiOS Testing Skill
iOS测试技能
Build reliable iOS apps with comprehensive testing
通过全面测试构建可靠的iOS应用
Learning Objectives
学习目标
By completing this skill, you will:
- Write effective unit tests with XCTest
- Create reliable UI tests
- Implement proper mocking strategies
- Debug efficiently with Instruments
- Achieve high code coverage
完成本技能学习后,你将能够:
- 使用XCTest编写高效的单元测试
- 创建可靠的UI测试
- 实施恰当的Mocking策略
- 借助Instruments高效调试
- 实现高代码覆盖率
Prerequisites
前置要求
| Requirement | Level |
|---|---|
| iOS Fundamentals | Completed |
| Swift | Intermediate |
| MVVM pattern | Basic |
| 要求 | 水平 |
|---|---|
| iOS基础 | 已掌握 |
| Swift | 中级 |
| MVVM模式 | 基础 |
Curriculum
课程大纲
Module 1: XCTest Fundamentals (4 hours)
模块1:XCTest基础(4小时)
Topics:
- XCTestCase structure
- Assertions library
- Test lifecycle (setUp/tearDown)
- Async testing
Code Example:
swift
final class UserViewModelTests: XCTestCase {
private var sut: UserViewModel!
private var mockService: MockUserService!
override func setUp() {
super.setUp()
mockService = MockUserService()
sut = UserViewModel(service: mockService)
}
func test_loadUser_success() async {
mockService.result = .success(.mock())
await sut.loadUser(id: "123")
XCTAssertNotNil(sut.user)
XCTAssertFalse(sut.isLoading)
}
}主题:
- XCTestCase结构
- 断言库
- 测试生命周期(setUp/tearDown)
- 异步测试
代码示例:
swift
final class UserViewModelTests: XCTestCase {
private var sut: UserViewModel!
private var mockService: MockUserService!
override func setUp() {
super.setUp()
mockService = MockUserService()
sut = UserViewModel(service: mockService)
}
func test_loadUser_success() async {
mockService.result = .success(.mock())
await sut.loadUser(id: "123")
XCTAssertNotNil(sut.user)
XCTAssertFalse(sut.isLoading)
}
}Module 2: Mocking & Test Doubles (4 hours)
模块2:Mocking与测试替身(4小时)
Topics:
- Protocol-based mocking
- Spy, stub, fake patterns
- Dependency injection for testing
- Fixtures and factories
主题:
- 基于协议的Mocking
- Spy、Stub、Fake模式
- 用于测试的依赖注入
- 测试数据与工厂
Module 3: UI Testing (5 hours)
模块3:UI测试(5小时)
Topics:
- XCUIApplication setup
- Element queries
- Accessibility identifiers
- Page Object pattern
- Handling flaky tests
主题:
- XCUIApplication配置
- 元素查询
- 可访问性标识符
- 页面对象模式
- 处理不稳定测试
Module 4: Debugging (4 hours)
模块4:调试(4小时)
Topics:
- LLDB commands
- Breakpoints (symbolic, conditional)
- View Debugger
- Memory Graph Debugger
主题:
- LLDB命令
- 断点(符号断点、条件断点)
- 视图调试器
- 内存图调试器
Module 5: Performance Testing (3 hours)
模块5:性能测试(3小时)
Topics:
- XCTMetric usage
- Time Profiler
- Allocations instrument
- Leaks detection
主题:
- XCTMetric使用
- 时间分析器
- 分配工具
- 内存泄漏检测
Module 6: CI Integration (3 hours)
模块6:CI集成(3小时)
Topics:
- Xcode Cloud setup
- GitHub Actions
- Code coverage reports
- Test parallelization
主题:
- Xcode Cloud配置
- GitHub Actions
- 代码覆盖率报告
- 测试并行化
Assessment Criteria
评估标准
| Criteria | Weight |
|---|---|
| Unit test quality | 30% |
| Mock implementation | 20% |
| UI test reliability | 25% |
| Debugging skills | 15% |
| CI integration | 10% |
| 标准 | 权重 |
|---|---|
| 单元测试质量 | 30% |
| Mock实现 | 20% |
| UI测试可靠性 | 25% |
| 调试技能 | 15% |
| CI集成 | 10% |
Coverage Targets
覆盖率目标
| Component | Target |
|---|---|
| ViewModels | 90%+ |
| Services | 85%+ |
| Utils | 95%+ |
| Views | 70%+ |
| 组件 | 目标 |
|---|---|
| ViewModels | 90%+ |
| Services | 85%+ |
| Utils | 95%+ |
| Views | 70%+ |
Common Mistakes
常见误区
- Testing implementation → Test behavior instead
- Flaky UI tests → Use waitForExistence
- Missing tearDown → Clean up resources
- Slow tests → Use mocks, avoid network
- 测试实现细节 → 应测试行为而非实现
- 不稳定的UI测试 → 使用waitForExistence
- 缺少tearDown → 清理资源
- 缓慢的测试 → 使用Mock,避免网络请求
Skill Validation
技能验证
- Test Suite: 80% coverage on sample project
- Mock Library: Reusable mock implementations
- UI Test Flow: End-to-end login flow
- Performance Baseline: Measure scroll performance
- 测试套件:示例项目达到80%覆盖率
- Mock库:可复用的Mock实现
- UI测试流程:端到端登录流程
- 性能基准:测量滚动性能