主要观点:
- 接下来的帖子将讨论测试,作者有非正统的测试观点,若现有测试方法有效则无需改变,但对于测试有困难的团队可提供另一种思路。
- 测试应尽量少用模拟(Mock),仅在边缘处使用,减少依赖注入,测试真实代码。
- 以 iOS 开发中的 Keychain 包装器为例,展示测试过程中模拟的常见问题及改进方法。
关键信息:
- 测试不应仅为追求高代码覆盖率,而应有实际原因。
- 最初为 Keychain 制作的协议存在问题,如接口过大像抽象类,内部实现与真实代码不一致等。
- 改进后的模拟协议应仅包含变化部分,如读写存储的方法,避免复制大量代码。
- 提出“自我模拟(self-mocking)”模式,将存储作为可选属性,当为 nil 时使用本地字典模拟,可自动匹配修改后的 Keychain。
重要细节:
- 在非 macOS 的 SPM 包中测试依赖 Keychain 的代码时需要某种“模拟”解决方案,因为无法访问系统钥匙串。
- 代码中存在一些关于 Keychain 编码的问题,如不同方法对字符串的编码不同,修改可能导致数据迁移等,需要测试来保证。
- 后续会讨论如“如何在没有依赖注入系统的情况下设置 storage = nil”等重要细节及相关哲学问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。