首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Mock:如何在函数中的特定点注入对象?

Python Mock:如何在函数中的特定点注入对象?
EN

Stack Overflow用户
提问于 2017-05-17 13:38:57
回答 1查看 205关注 0票数 1

给定一个函数中对一个对象的多个调用(比方说子流程调用),可以模拟特定的子流程调用吗?目标是确定一个特定的逻辑用例来操纵单元测试。或者这只是模拟(或SDET功能)的限制,我需要将较大的函数分解为较小的函数,以便它们只包含一个子流程调用,并且每个子流程调用都可以单独模拟和单元测试?

EN

回答 1

Stack Overflow用户

发布于 2017-05-17 14:00:35

我不知道这是否可能,但您可以让mock执行原始方法所做的任何事情。

代码语言:javascript
复制
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的第二个调用,总共有三个调用。因此,运行上面的代码会得到以下输出:

代码语言:javascript
复制
bar(1)
stubbed a call with args (2,) and kwargs {}
bar(3)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44016441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档