概览
建立稳定的测试体系,核心是明确分层、减少脆弱依赖、让测试可读可维护。
测试金字塔
- 单元测试:业务与工具函数,覆盖面最大
- 集成测试:模块协作与数据流验证
- UI 测试:关键路径保障
XCTest 与 Swift Testing
- XCTest 适合存量工程与工具链稳定性
- Swift Testing 更轻量,语法更接近现代 Swift 风格
@Suite("UserService")
struct UserServiceTests {
@Test("load user success")
func loadUser() async throws {
let service = UserService(client: MockClient())
let user = try await service.loadUser(id: "1")
#expect(user.name == "Demo")
}
}
常见坑
- 依赖真实网络:引入 Mock Client 或 Stub Server
- 过度依赖时间:用可控时钟或注入调度器
- 大量 UI 测试:只保留关键路径
推荐清单
- 新功能先写单元测试,再补集成测试
- 关键业务加 smoke test
- 每次重构前先完善快照与契约测试