Python测试-重置所有模拟?

Python测试-重置所有模拟?,python,unit-testing,testing,mocking,pytest,Python,Unit Testing,Testing,Mocking,Pytest,在使用Python/PyTest进行单元测试时,如果您的代码中没有补丁装饰程序或补丁块,是否有办法在每个文件/模块的末尾重置所有模拟,以避免文件间测试污染 在一个Python测试文件中模拟的东西似乎在另一个文件中以相同的返回值保持模拟状态,这意味着我的模拟在测试和文件之间持续(当不使用补丁装饰器或带有补丁的块时) 除了打补丁,还有别的办法吗?不会有一个mock.reset\u all\u mocks()之类的东西吧?为什么不使用 monkeypatch函数参数帮助您安全地设置/删除属性、字典项或

在使用Python/PyTest进行单元测试时,如果您的代码中没有补丁装饰程序或补丁块,是否有办法在每个文件/模块的末尾重置所有模拟,以避免文件间测试污染

在一个Python测试文件中模拟的东西似乎在另一个文件中以相同的返回值保持模拟状态,这意味着我的模拟在测试和文件之间持续(当不使用补丁装饰器或带有补丁的
块时)

除了打补丁,还有别的办法吗?不会有一个
mock.reset\u all\u mocks()
之类的东西吧?

为什么不使用

monkeypatch函数参数帮助您安全地设置/删除属性、字典项或环境变量,或修改sys.path以进行导入

你可以:

def test1(monkeypatch):
    monkeypatch.setattr(.....

我最后做的就是使用图书馆。根据自述文件:

这个插件安装了一个mocker装置,它是一个薄薄的包装器 由优秀的模拟包提供的修补API,但是 不必担心在任务结束时撤消修补程序的好处 测试。(重点加上。)

现在我可以做:
mocker.patch.object(模块'method',return_value='hi')
,测试结束时将删除补丁。
如果您在一个测试中有许多mock,或者如果您想在测试期间更改mock,则不再需要将
一起使用,这样该解决方案可以很好地扩展。

在monkey patching之后,我将在测试结束时撤消它,以避免泄漏到其他测试中,或者将修补限制在范围内

def test1(monkeypatch):
    monkeypatch.setattr(...)
    assert(...)
    monkeypatch.undo()

您目前是如何进行模拟的?为什么?我有时进行修补,有时执行类似于
Module.method=MagicMock()
的操作。问题是,此模拟在不同的文件中持续存在。有没有办法解决这个问题,使它只在一个文件/模块中持续存在?请注意:对于那些可以使用
补丁的人来说,它提供了这个确切的行为。从文档中:
修补程序装饰器仅用于修补它们装饰的功能范围内的对象。