Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只有特定参数的Python模拟函数_Python_Python 2.7_Python Mock - Fatal编程技术网

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

只有特定参数的Python模拟函数,python,python-2.7,python-mock,Python,Python 2.7,Python Mock,我是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':

我是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...
它不会工作,因为
原始配置
不是
配置
的副本。它引用同一个模块,该模块以无限循环结束。我可以试着克隆原始的
config
模块,但这似乎有些过头了

有类似的东西我可以用吗?e、 g:

obj.stub(:message.),带有('an'u expected'u argument')和\u return('a'u mock'u result')


任何帮助都将不胜感激。谢谢。

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


这里的
original\u config\u get
引用了原始函数,然后将其替换为
Mock()
对象。

config.get=Mock…
行上的缩进是否正确?@PetrGladkikh是的。然后我不明白它是如何执行的。
if
的两个分支都以
return
结尾,所以这一行似乎永远也达不到。
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)