为超4年iOS MVC老旧项目做单元测试,优先测试哪些组件?
给老MVC iOS项目加单元测试的优先级建议
兄弟,太懂你这种接手超4年、历经多手、奉行“能跑就行”的老项目,突然要加单元测试的头大感了!结合我踩过的坑,给你理个清晰的优先级:
1. 最优先:工具类/通用组件
这些是最容易出成果、性价比最高的部分,因为它们通常是纯逻辑、无UI依赖、输入输出明确的“纯函数”类型:
- 比如网络请求封装类、JSON解析工具、加密/解密类、日期格式转换工具、字符串处理工具等
- 测试思路:给固定输入,验证输出是否符合预期,覆盖正常、边界、异常场景。比如测试加密后的字符串是否和预期一致,空字符串解析会不会崩溃,日期转换在时区切换下是否正确。
- 好处:这类工具被项目中大量代码依赖,覆盖它们能快速提升整体稳定性,而且写测试用例的成本极低。
2. 次优先:模型层(Model)
MVC里的Model是业务数据的核心,同样没有UI耦合,是测试的第二梯队:
- 重点测模型里的业务计算逻辑和数据校验逻辑,比如订单模型的
calculateTotal()方法、用户模型的isVip()判断、表单数据的合法性校验等 - 测试思路:构造各种数据场景(正常数据、空值、异常数值),调用模型方法,验证结果是否符合业务规则。比如测试订单包含折扣、满减时总价计算是否正确,用户积分不足时是否返回非VIP状态。
3. 最后考虑:视图控制器(ViewController)
VC因为和UI、系统控件耦合严重,测试成本高,建议放在最后:
- 如果要测,优先剥离非UI逻辑来测试,比如把VC里的数据处理、业务判断抽成独立方法,或者用依赖注入替换掉网络、数据库等外部依赖
- 比如测试VC在接口返回空数据时,是否正确调用了空状态视图的显示方法;或者用户点击“提交”按钮时,表单数据不合法是否触发了错误提示逻辑(不用真的测弹窗,测判断逻辑即可)
- 真要测UI操作的话,可以用XCTest的UI测试,但老项目可能UI变动多,维护成本高,优先级放最低
额外实用小 tips
- 不用追求100%覆盖率,先覆盖高频使用的核心路径和之前出过bug的代码片段,先保证关键业务不崩
- 写测试的过程中,可以顺便做小重构:比如把VC里的逻辑抽成ViewModel或者工具类,慢慢降低VC的复杂度,后续测试也更方便
- 用XCTest自带的断言就够了,比如
XCTAssertEqual、XCTAssertNil、XCTAssertThrowsError,不用引入太多第三方框架
内容的提问来源于stack exchange,提问作者hoang Cap
相关产品推荐
相关产品推荐

