mock.patch没生效最常见的原因是目标路径写错,应patch被测函数实际访问的位置而非import位置;可用patch.object更安全,side_effect控制多返回值,assert_called系列验证调用,fixture封装patch避免重复。

Python如何模拟复杂对象_使用unittest.mock配合pytest进行注入

mock.patch 为什么没生效?

最常见的原因是 patch 的目标位置写错了——不是写被测试代码里 import 的地方,而是写「被测试对象实际访问它的地方」。比如你在 utils.py 里写了 requests.get(),但测试时却 patch requests.gettest_utils.py 中的导入路径,那 mock 就不会触发。

实操建议:

如何让 mock 返回不同值以覆盖分支逻辑?

单次调用返回固定值不够用,比如一个函数里两次调用 json.loads(),第一次成功、第二次抛异常,就得控制返回行为。

实操建议:

mock 之后怎么验证调用是否符合预期?

光 mock 不验证,等于白 mock。容易漏掉参数拼错、调用次数不对、甚至根本没调用。

实操建议:

pytest.fixture + mock 怎么组织才不混乱?

把 patch 写进每个 test 函数太重复;全塞进 conftest.py 又容易过度共享、干扰其他测试。

实操建议:

真实项目里,mock 的边界往往比想象中模糊——比如你以为只 mock 了数据库,结果 ORM 自动触发了缓存 client 的初始化。多打一行 print(mock_obj.__dict__) 或用 mock_obj.method.call_args_list 看看到底发生了什么,比猜快得多。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。