WMX · 随记
·Python· 3 分钟阅读

unittest.mock:在依赖边界验证调用行为

测试业务分支时,真的发送邮件或请求远程服务既慢又不稳定。把外部依赖作为参数传入,可以在测试中替换为记录调用的对象。

Python 系列概览:输入校验、数据处理与行为验证
Python 系列概览:输入校验、数据处理与行为验证 点击图片查看大图 ↗

问题从哪里出现

测试业务分支时,真的发送邮件或请求远程服务既慢又不稳定。把外部依赖作为参数传入,可以在测试中替换为记录调用的对象。

理解核心机制

Mock 可以设置返回值、模拟异常并断言调用参数。依赖注入让替换位置明确;如果使用 patch,应替换被测模块实际查找该名字的位置。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。

Python11 行 · 可横向滚动
from unittest.mock import Mock
def notify_if_low(stock, send):
    if stock < 3:
        send("stock_low", count=stock)

send = Mock()
notify_if_low(8, send)
send.assert_not_called()
notify_if_low(2, send)
send.assert_called_once_with("stock_low", count=2)
print("notification boundary checked")

适用边界与常见误区

Mock 验证的是你声明的交互,不证明真实服务与假设一致。仍需要少量集成测试检查协议、序列化和错误处理,避免模拟对象掩盖接口变化。

继续练习

让 send 抛出异常,明确调用方应该传播、重试还是记录失败;只验证实际业务要求,不把内部实现细节全部固定在测试里。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档