给定一个函数中对一个对象的多个调用(比方说子流程调用),可以模拟特定的子流程调用吗?目标是确定一个特定的逻辑用例来操纵单元测试。或者这只是模拟(或SDET功能)的限制,我需要将较大的函数分解为较小的函数,以便它们只包含一个子流程调用,并且每个子流程调用都可以单独模拟和单元测试?
发布于 2017-05-17 14:00:35
我不知道这是否可能,但您可以让mock执行原始方法所做的任何事情。
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的第二个调用,总共有三个调用。因此,运行上面的代码会得到以下输出:
bar(1)
stubbed a call with args (2,) and kwargs {}
bar(3)https://stackoverflow.com/questions/44016441
复制相似问题