我们最近从 unittest 切换到 pytest。我在mocker.patch
用作上下文管理器时遇到了一个奇怪的问题。考虑以下示例。
module_a.py
class MyClass:
def value(self):
return 10
module_b.py
import module_a
class AnotherClass:
def get_value(self):
return module_a.MyClass().value()
test_module_b.py
from module_b import AnotherClass
def test_main_2(mocker):
with mocker.patch('module_a.MyClass.value', return_value=20):
value = AnotherClass().get_value()
assert value == 20
value = AnotherClass().get_value()
assert value == 10
我希望一旦上下文管理器退出,MyClass 的 value 方法方法将被恢复(返回值为 10),但是测试在第二个断言语句上失败并出现断言错误20 != 10
如果我使用完全相同的测试,但替换mocker.patch
为unittest.mock.patch
,它通过。我认为 pytest-mock 与 unittest.mock 共享相同的 API,所以我对为什么会有差异感到困惑。