Swift 测试体系

从 XCTest 到 Swift Testing,构建稳定的测试金字塔。

概览

建立稳定的测试体系,核心是明确分层、减少脆弱依赖、让测试可读可维护。

测试金字塔

  • 单元测试:业务与工具函数,覆盖面最大
  • 集成测试:模块协作与数据流验证
  • 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
  • 每次重构前先完善快照与契约测试