pytest-mock 是一个 pytest 插件,提供 mocker fixture,作为 Python 标准库 unittest.mock 补丁 API 的轻量封装。它会在每个测试结束时自动撤销所有 mocking,避免手动清理。
用途
pytest-mock 用于在 pytest 测试中编写 mocking、patching、spying 或 stubbing 逻辑。它把 unittest.mock 的能力整合进 pytest 的 fixture 体系,让测试代码更简洁,并自动管理 mock 生命周期。
主要能力
mocker fixture
mocker 是主要接口,在测试函数中请求即可使用:
def test_example(mocker): mock_func = mocker.patch("module.function")
所有 mock 会在测试结束后自动清理。
Fixture 作用域
提供多种作用域:mocker(function,默认,每个测试独立)、class_mocker(class,在测试类内共享)、module_mocker(module,在测试模块内共享)、package_mocker(package,在包内共享)、session_mocker(session,在整个会话内共享)。
打补丁方法
- mocker.patch(target, ...):按点路径补丁模块级对象。
- mocker.patch.object(target, attribute, ...):直接补丁对象属性。
- mocker.patch.dict(in_dict, values, clear=False):临时修改字典。
- mocker.patch.multiple(target, **kwargs):一次补丁多个属性。
- mocker.patch.context_manager(target, attribute, ...):与 patch.object 类似,但将 mock 用作上下文管理器时不会警告。
常用补丁参数
支持 new、return_value、side_effect、autospec、spec、spec_set、create、new_callable 等参数。
Spy
mocker.spy() 包装真实方法并跟踪调用,同时保留真实行为。可访问 spy_return(最后一次返回值)、spy_return_list(所有返回值列表)、spy_return_iter(迭代器副本,需 duplicate_iterators=True)、spy_exception(最后一次异常)。
Stub
mocker.stub(name=None) 创建接受任意参数的 stub;mocker.async_stub(name=None) 创建异步 stub。
Mock 辅助
mocker.create_autospec(spec, ...) 创建符合 spec 签名的 mock。可直接通过 mocker 访问 Mock、MagicMock、AsyncMock、PropertyMock、NonCallableMock 等类。
其他工具
支持 mocker.ANY、mocker.call、mocker.sentinel、mocker.mock_open、mocker.seal 等。
管理 Mock
- mocker.stopall():立即停止所有补丁。
- mocker.stop(mock):停止指定补丁。
- mocker.resetall():重置所有 mock 但不停止它们。
断言增强
pytest-mock 利用 pytest 的比较能力增强断言错误信息,展示期望值与实际值的差异。支持调用断言(assert_called、assert_called_once、assert_called_with、assert_called_once_with、assert_any_call、assert_has_calls、assert_not_called)以及异步断言(assert_awaited、assert_awaited_once、assert_awaited_with、assert_awaited_once_with、assert_any_await、assert_has_awaits、assert_not_awaited)。
使用方式
在 pytest.ini、pyproject.toml 或 setup.cfg 中可配置:mock_traceback_monkeypatch(默认 true,启用增强断言消息)、mock_use_standalone_module(默认 false,使用独立 mock 包而非 unittest.mock)。
常见模式包括:在“使用处”而非“定义处”打补丁;通过 side_effect 测试异常;通过 side_effect 列表返回多个值;mock 异步函数;mock 类方法;mock 属性(使用 PropertyMock)。
适用场景
适用于编写需要隔离外部依赖、验证调用行为、模拟异常或返回值的 pytest 测试,尤其适合需要自动清理 mock、统一 fixture 作用域、增强断言可读性的项目。
限制
资料未提供安装命令、版本要求、平台限制、收费信息或性能数据,这些内容暂未提供。