如何在Python测试中访问patch寄存器以查看活跃补丁?
排查Python测试中残留补丁的方法
要查看当前活跃的补丁,直接利用unittest.mock的内部跟踪机制即可,以下是具体方案:
查看当前活跃补丁列表
unittest.mock模块维护了一个全局的_active_patchers列表,所有已激活但未清理的补丁都会存在这里。你可以在测试的关键位置(比如断言失败前)添加代码打印这个列表:import unittest.mock as mock # 在需要排查的位置插入 print("当前活跃的补丁:") for patcher in mock._active_patchers: print(f"补丁目标:{patcher.target}") print(f"原始对象:{patcher.original}\n")这个列表里的每个元素都是
patch对象,通过target属性能看到被补丁的模块/对象路径,original则是被替换前的原始对象。验证残留补丁是否是问题根源
如果怀疑是其他测试的残留补丁导致失败,可以在你的测试用例开始前强制停止所有活跃补丁:import unittest.mock as mock def test_my_feature(): # 先清理所有残留补丁 mock.patch.stopall() # 后续原测试代码 with patch("my.module") as mocked_method: [...] mocked_method.assert_called()如果这样修改后测试能在套件中通过,就说明确实存在未正确清理的补丁。
检查测试用例的补丁使用规范
确保所有测试都正确使用patch的自动清理机制:- 优先用
with语句包裹补丁代码,退出语句块时自动清理 - 用
@patch装饰器修饰测试函数,测试前后框架会自动启停补丁 - 避免手动调用
patcher.start()后忘记调用patcher.stop()
- 优先用
内容的提问来源于stack exchange,提问作者David Jiménez Martínez
相关产品推荐
相关产品推荐

