Mock、依赖替换与单元测试边界
接口测试、单元测试与自动化测试#Python全栈#第十七阶段#接口测试、单元测试与自动化测试#Mock、依赖替换与单元测试边界约 856 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
什么情况下应该使用 Mock,什么情况下应该连接真实依赖?
追问 短信、对象存储和数据库事务分别怎样安排测试?全部依赖被替换后,哪些集成问题仍然无法发现?
Stub、Mock 与 Fake 的使用目的有什么区别?
追问 固定返回值、验证调用和内存模拟实现分别适合什么场景?Fake 与真实服务的行为差异怎样通过补充测试发现?
patch 应替换对象的定义位置,还是被测代码查找对象的位置?
追问 被测模块使用 from ... import ... 时为什么补丁可能不生效?怎样确认测试确实走到了替代对象,而不是访问了真实外部服务?
Mock 的 return_value 与 side_effect 怎样表达不同结果?
追问 怎样模拟连续失败后成功、永久异常和不同参数返回?为什么依赖不必要的固定调用次数可能使测试过于脆弱?
spec、spec_set 与 autospec 能帮助发现哪些错误?
追问 属性名称写错、方法签名改变和不存在的方法调用怎样暴露?接口形状正确后,为什么仍不能证明真实依赖语义正确?
怎样验证外部操作的调用参数,同时检查业务结果?
追问 邮件发送对象、报告路径和重试参数如何核对?只断言某方法被调用,与验证用户最终看到正确结果有什么区别?
AsyncMock 怎样用于异步依赖测试?
追问 被调用与被 await 如何区分?如果代码创建了协程却没有等待,怎样让测试暴露问题,并验证异步异常路径?
monkeypatch 怎样替换环境变量、属性和配置?
追问 测试结束后替换如何恢复?模块导入时缓存配置、跨线程访问和子进程启动分别会对替换范围造成什么影响?
怎样测试外部 HTTP 服务超时、返回错误或响应格式损坏?
追问 连接超时、读取超时、非成功状态码和 JSON 解析失败怎样分别构造?怎样检查降级结果与有限重试,避免测试真实等待很久?
怎样识别“测试全部通过,但真实运行失败”的过度 Mock 问题?
追问 序列化、约束、事务、超时和第三方协议在哪些层补测?怎样保留少量真实集成测试,而不把单元测试变成不可控的外网调用?
替代对象核对资料: Python:unittest.mock。