gpt4 book ai didi

python - 模拟通过实例使用的类方法

转载 作者:太空狗 更新时间:2023-10-29 17:58:14 30 4
gpt4 key购买 nike

我正尝试使用 mock 修补类方法,如所述 in the documentation . Mock 对象本身工作正常,但它的方法不工作:例如,它们的属性如 call_count 没有更新,即使类 method_calls 属性>Mock 对象是。更重要的是,它们的 return_value 属性被忽略了:

class Lib:
"""In my actual program, a module that I import"""
def method(self):
return "real"

class User:
"""The class I want to test"""
def run(self):
l = Lib()
return l.method()

with patch("__main__.Lib") as mock:
#mock.return_value = "bla" # This works
mock.method.return_value = "mock"
u = User()
print(u.run())

>>>
mock
<MagicMock name='Lib().method()' id='39868624'>

我在这里做错了什么?

编辑:通过构造函数传递类 Mock 也不起作用,因此这与 patch 函数没有真正的关系。

最佳答案

我发现了我的错误:为了配置模拟实例的方法,我必须使用 mock().method 而不是 mock.method

class Lib:
"""In my actual program, a module that I import"""
def method(self):
return "real"

class User:
"""The class I want to test"""
def run(self):
l = Lib()
return l.method()

with patch("__main__.Lib") as mock:
#mock.return_value = "bla" # This works
mock().method.return_value = "mock"
u = User()
print(u.run())

关于python - 模拟通过实例使用的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728748/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com