类型的嘲弄 - Cocoaphony

主要观点:

  • 接下来的帖子将讨论测试,作者有非正统的测试观点,若现有测试方法有效则无需改变,但对于测试有困难的团队可提供另一种思路。
  • 测试应尽量少用模拟(Mock),仅在边缘处使用,减少依赖注入,测试真实代码。
  • 以 iOS 开发中的 Keychain 包装器为例,展示测试过程中模拟的常见问题及改进方法。

关键信息:

  • 测试不应仅为追求高代码覆盖率,而应有实际原因。
  • 最初为 Keychain 制作的协议存在问题,如接口过大像抽象类,内部实现与真实代码不一致等。
  • 改进后的模拟协议应仅包含变化部分,如读写存储的方法,避免复制大量代码。
  • 提出“自我模拟(self-mocking)”模式,将存储作为可选属性,当为 nil 时使用本地字典模拟,可自动匹配修改后的 Keychain。

重要细节:

  • 在非 macOS 的 SPM 包中测试依赖 Keychain 的代码时需要某种“模拟”解决方案,因为无法访问系统钥匙串。
  • 代码中存在一些关于 Keychain 编码的问题,如不同方法对字符串的编码不同,修改可能导致数据迁移等,需要测试来保证。
  • 后续会讨论如“如何在没有依赖注入系统的情况下设置 storage = nil”等重要细节及相关哲学问题。
阅读 9
0 条评论