编程语言
首页 > 编程语言> > Python模拟函数只有特定的参数

Python模拟函数只有特定的参数

作者:互联网

我是Python的新手,我只是在传递特定参数时试图模拟一个函数.如果通过了除所需参数之外的其他参数,我想改为调用原始函数.

在Python 2.7中,我试过这样的事情:

from foo import config

def test_something(self):
    original_config = config # config is a Module.

    def side_effect(key):
        if key == 'expected_argument':
            return mocked_result
        else:
            return original_config.get(key)

        config.get = Mock(side_effect=side_effect)

        # actualy_test_something...

它不起作用’因为original_config不是config的副本.它引用了以无限循环结束的相同模块.我可以尝试克隆原始配置模块,但这似乎有点矫枉过正.

有没有类似于我可以使用的RSpec’s mocks?例如:

obj.stub(:消息).随着( ‘an_expected_argument’)and_return( ‘a_mocked_result’)

任何帮助,将不胜感激.谢谢.

解决方法:

您需要首先存储对未修补函数的引用:

def test_something(self):
    original_config_get = config.get

    def side_effect(key):
        if key == 'expected_argument':
            return mocked_result
        else:
            return original_config_get(key)

        config.get = Mock(side_effect=side_effect)

这里original_config_get在用Mock()对象替换它之前引用原始函数.

标签:python-mock,python,python-2-7
来源: https://codeday.me/bug/20190830/1767127.html