LESSON 53 / 576 分钟
Swift Testing、XCTest 与性能验证
让测试覆盖真正会出错的规则,而不是验证 AI 刚写下的实现细节。
用你的前端经验理解
Swift Testing 可类比单元测试框架;XCTest 仍用于许多现有测试,UI 自动化常用 XCUITest。
01 / 理解问题
为什么需要它
测试要保护真正容易出错的边界,而不是给每个属性写一条赋值断言。纯逻辑测试适合验证价格计算、状态转换与同步合并;集成测试覆盖存储、接口或框架接合;UI 测试检查用户能否完成关键流程。不同层提供的证据不能相互替代。
它是怎样工作的
Swift Testing 可用于现代 Swift 测试组织,XCTest 在既有项目和 UI 自动化等场景仍常见。异步测试应等待真实完成条件,不依赖随意 sleep。性能先用 Instruments 找瓶颈,再针对主线程工作、内存增长或重复请求做优化;模拟器上流畅不能证明低端真机也符合预期。
02 / 掌握要点
把关键概念连起来
1
逻辑
用 Swift Testing 的 @Test 与 #expect 验证输入输出、边界和错误;使用依赖注入控制网络与时间。
2
UI
测试用户关键路径,覆盖键盘、大字体、权限拒绝、离线与恢复;Preview 是开发辅助,不是测试报告。
3
性能
Instruments 测 CPU、内存和卡顿;关注主线程阻塞、强引用环、大图解码和列表重复工作。
READ THE CODE
Swift · 示例片段
import Foundationimport Testing@Test func titleIsTrimmed() { let input = " Swift " let title = input.trimmingCharacters(in: .whitespaces) #expect(title == "Swift")}- 测试的价值在于固定输入与明确预期:断言应描述业务规则,而不仅是函数有没有被调用。
- 示例适合放入对应测试 Target;需要外部资源的逻辑应注入替身或隔离的测试存储。
用于理解当前概念的代码片段;部分示例需要放入对应工程与作用域,并补齐上下文。
03 / 案例推演
验证“保存失败不丢草稿”
- 用测试替身让仓库返回固定错误,执行保存动作,检查草稿、错误提示和按钮状态。
- 再用临时或内存存储验证正常保存与查询,不让测试操作用户真实数据。
- 最后在真实页面输入长标题并保存,确认键盘、返回和提示共同工作。
这里需要你亲自判断
不要把“编译通过”当作“功能验证通过”;真实设备上的能耗与内存行为同样重要。
04 / 动手验证
做一个小练习
为阅读清单设计三个有意义的测试:空标题、标记已读、重启后数据仍在。
- 为一个功能写成功、空输入、依赖失败三项有业务意义的验收。
- 连续打开并关闭详情,观察对象或内存是否持续增加,再判断是否存在保留问题。
展开参考思路与验收标准
好测试能指出具体行为回归,例如失败时草稿丢失;“函数执行过”并不够。需要真机验证的硬件与性能边界应明确记录,不能用单元测试通过替代。
05 / 检查理解
验证大量图片滚动卡顿更适合哪个工具?
答对理解题后即可标记完成