LESSON 53 / 576 分钟

Swift Testing、XCTest 与性能验证

让测试覆盖真正会出错的规则,而不是验证 AI 刚写下的实现细节。

用你的前端经验理解

Swift Testing 可类比单元测试框架;XCTest 仍用于许多现有测试,UI 自动化常用 XCUITest。

为什么需要它

测试要保护真正容易出错的边界,而不是给每个属性写一条赋值断言。纯逻辑测试适合验证价格计算、状态转换与同步合并;集成测试覆盖存储、接口或框架接合;UI 测试检查用户能否完成关键流程。不同层提供的证据不能相互替代。

它是怎样工作的

Swift Testing 可用于现代 Swift 测试组织,XCTest 在既有项目和 UI 自动化等场景仍常见。异步测试应等待真实完成条件,不依赖随意 sleep。性能先用 Instruments 找瓶颈,再针对主线程工作、内存增长或重复请求做优化;模拟器上流畅不能证明低端真机也符合预期。

把关键概念连起来

1

逻辑

用 Swift Testing 的 @Test 与 #expect 验证输入输出、边界和错误;使用依赖注入控制网络与时间。

2

UI

测试用户关键路径,覆盖键盘、大字体、权限拒绝、离线与恢复;Preview 是开发辅助,不是测试报告。

3

性能

Instruments 测 CPU、内存和卡顿;关注主线程阻塞、强引用环、大图解码和列表重复工作。

Swift · 示例片段
import Foundationimport Testing@Test func titleIsTrimmed() {    let input = "  Swift  "    let title = input.trimmingCharacters(in: .whitespaces)    #expect(title == "Swift")}
  • 测试的价值在于固定输入与明确预期:断言应描述业务规则,而不仅是函数有没有被调用。
  • 示例适合放入对应测试 Target;需要外部资源的逻辑应注入替身或隔离的测试存储。

用于理解当前概念的代码片段;部分示例需要放入对应工程与作用域,并补齐上下文。

验证“保存失败不丢草稿”

  1. 用测试替身让仓库返回固定错误,执行保存动作,检查草稿、错误提示和按钮状态。
  2. 再用临时或内存存储验证正常保存与查询,不让测试操作用户真实数据。
  3. 最后在真实页面输入长标题并保存,确认键盘、返回和提示共同工作。

这里需要你亲自判断

不要把“编译通过”当作“功能验证通过”;真实设备上的能耗与内存行为同样重要。

做一个小练习

为阅读清单设计三个有意义的测试:空标题、标记已读、重启后数据仍在。

  1. 为一个功能写成功、空输入、依赖失败三项有业务意义的验收。
  2. 连续打开并关闭详情,观察对象或内存是否持续增加,再判断是否存在保留问题。
展开参考思路与验收标准

好测试能指出具体行为回归,例如失败时草稿丢失;“函数执行过”并不够。需要真机验证的硬件与性能边界应明确记录,不能用单元测试通过替代。

验证大量图片滚动卡顿更适合哪个工具?

继续查阅官方资料
Apple Developer 官方资料

本课聚焦核心认知。具体 API、系统要求与发布政策,以当前官方文档和工程验证为准。

答对理解题后即可标记完成