⚠️ 陷阱 3:过度 Mock 导致“虚假通过”
❌ 错误做法:
@patch('my_module.requests.post')def test_payment(mock_post): mock_post.return_value.status_code = 200 mock_post.return_value.json.return_value = {"success": True} result = process_payment(100) assert result is True # 看似通过
💥 后果:
未测真实逻辑:只验证了“如果 API 返回成功,则函数返回 True”
忽略集成风险:实际调用时可能因参数错误、网络问题失败
Mock 失真:Mock 返回的数据结构与真实 API 不一致
✅ 正确做法:分层 Mock + 契约验证
# 1. 单元测试:Mock 外部依赖,聚焦内部逻辑
@patch('my_module.PaymentGateway')def test_payment_logic(mock_gateway): mock_gateway.charge.return_value = True assert process_payment(100) is True
# 2. 集成测试:调用真实服务(或契约测试)
def test_payment_integration(): # 使用测试沙箱环境 resp = requests.post("https://payment-sandbox.com/charge", ...) assert resp.status_code == 200 assert resp.json()["transaction_id"] is not None
📌 原则:Mock 是手段,不是目的。关键路径必须有真实集成验证。