私はそれが可能かどうかわかりませんが、元の方法で行ったことは何でもできます。私は3個の呼び出しの合計のうち、bar
にのみ2回目の呼び出しを嘲笑している例として
import mock, sys
def bar(n):
print('bar({})'.format(n))
def foo():
bar(1)
bar(2)
bar(3)
class MockBar(mock.MagicMock):
original = staticmethod(bar)
def __call__(self, *args, **kwargs):
if self.call_count == 1:
print('stubbed a call with args {} and kwargs {}'.format(args, kwargs))
else:
MockBar.original(*args, **kwargs)
super(MockBar, self).__call__(*args, **kwargs)
with mock.patch.object(sys.modules[__name__], 'bar', MockBar()):
foo()
。上のコードを実行すると、出力が得られます。
bar(1)
stubbed a call with args (2,) and kwargs {}
bar(3)
出典
2017-05-17 06:00:35
wim