gpt4 book ai didi

python - 如何在 Python 模拟中调用模拟方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:45 25 4
gpt4 key购买 nike

我想创建一个模拟方法来调用被模拟的底层方法。

我在想像下面这样的东西,但我找不到任何关于持有对被模拟对象的引用的模拟对象的文档,我将其表示为 [[wrapped_method_foo]] 下面:

from mock import patch

class Foo(object):
def __init__(self, state):
self.state = state
def foo(self, a):
print "real foo", a
return a + self.state

f = Foo(2000)
f.foo(1)

with patch.object(Foo, 'foo', autospec=True) as mock_foo:
def side_effect(self, a):
print "mock foo", a
return mock_foo.[[wrapped_method_foo]](self, a*2)
mock_foo.side_effect = side_effect

f.foo(2)

最佳答案

最简单的方法是在修补之前获取您自己对原始函数的引用。可以在类的单个实例上进行修补:

original_foo = f.foo
with patch.object(f, 'foo') as mock_foo:
def side_effect(a):
print "mock foo", a
return original_foo(a*2)
mock_foo.side_effect = side_effect

f.foo(2)

...或者通过修补类上的未绑定(bind)方法:

original_foo = Foo.foo
with patch.object(Foo, 'foo', autospec=True) as mock_foo:
def side_effect(self, a):
print "mock foo", a
return original_foo(self, a*2)
mock_foo.side_effect = side_effect

f.foo(3)

关于python - 如何在 Python 模拟中调用模拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30719735/

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