SuperAPI AI 工具集

ios-testing

测试与质量

查看项目

更新于 10-15 16:06

技能介绍

iOS Testing Best Practices 是一份面向 iOS 与 Swift 应用的综合性测试指南,按 principal engineer 级别撰写,包含 8 个类别共 44 条规则,按影响力排序,用于指导测试架构决策、测试编写模式与 CI 基础设施。

【适用架构前提】所有指导假设采用诊所模块化 MVVM-C 架构(iOS 26 / Swift 6.2):功能模块只导入 Domain 与 DesignSystem(不导入 Data,也不导入同级功能模块);App target 是收敛点,持有 DependencyContainer、具体 coordinator 与 Route Shell 装配;Domain 保持纯 Swift,定义模型以及 repository、*Coordinating、ErrorRouting、AppError 契约;Data 负责 SwiftData/网络/同步/重试/后台 I/O 并实现 Domain 协议;读写流程默认为 stale-while-revalidate 读取与乐观排队写入;ViewModel 直接调用 repository 协议(没有默认的 use-case/interactor 层)。

【适用时机】编写 iOS 应用新单元测试或 UI 测试、设计可测试架构与依赖注入、测试 async/await、actor 与 Combine publisher、搭建快照测试或视觉回归套件、配置 CI 流水线、测试计划与并行执行时参考本指南。

【规则分类与优先级】指南按优先级分为 8 个类别,每条规则带前缀:

  1. 测试架构与可测试性(CRITICAL,前缀 arch-):依赖协议而非具体类型;使用构造函数注入而非服务定位器;分离单元测试与 UI 测试 target;谨慎使用 @testable import;每个测试聚焦一个断言概念;按 Arrange-Act-Assert 组织测试。

  2. 单元测试基础(CRITICAL,前缀 unit-):新测试优先使用 Swift Testing 而非 XCTest;对输入变化使用参数化测试;按测试所验证的行为命名;使用 #expect 与 #require 而非 XCTAssert;用 #require 处理测试前置条件;将相关测试组织为 suite;用 tag 对横切关注点的测试分类。

  3. 测试替身与隔离(HIGH,前缀 mock-):从协议而非子类创建 mock;用 spy 验证交互;用 stub 提供确定性返回值;避免对值类型与简单逻辑过度 mock;集成测试使用内存 fake;用依赖容器配置测试。

  4. 异步与并发测试(HIGH,前缀 async-):在测试中直接 await 异步函数;对基于回调的 API 使用 confirmation();在 MainActor 上测试 MainActor 隔离的代码;通过异步接口测试 actor 状态;显式测试任务取消路径。

  5. SwiftUI 测试(MEDIUM-HIGH,前缀 swiftui-):将 @Observable 模型作为普通对象测试;为测试注入 environment 依赖;将预览作为视觉冒烟测试;把逻辑从 view 抽取到可测试模型;用 @Bindable 测试 binding 行为。

  6. UI 与验收测试(MEDIUM,前缀 ui-):用 accessibility identifier 查询元素;用 page object 模式封装屏幕;通过启动参数配置测试状态;等待元素而非使用 sleep();测试完整用户旅程而非单个屏幕;UI 测试之间重置应用状态。

  7. 快照与视觉测试(MEDIUM,前缀 snap-):用 swift-snapshot-testing 做视觉回归;跨设备尺寸与 traits 做快照;使用具名快照引用以提升清晰度;对非图像断言使用内联快照。

  8. 测试可靠性与 CI(LOW-MEDIUM,前缀 ci-):用 Xcode Test Plans 配置环境;启用并行测试执行;隔离不稳定的测试而非禁用;使用确定性测试数据而非随机生成;为关键路径设置覆盖率阈值。

【参考文件】references/_sections.md 提供类别定义与排序;assets/templates/_template.md 提供新增规则模板;metadata.json 提供版本与参考信息。资料未提供更多关于具体代码示例、安装命令、收费或平台的细节。