Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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_Unit Testing_Mocking - Fatal编程技术网

Python 模拟跨库的调用链

Python 模拟跨库的调用链,python,unit-testing,mocking,Python,Unit Testing,Mocking,我正在使用库将请求抽象到内部API。在我的代码中,self.api是一个吊床对象,我进行以下调用: posts=self.api.posts().GET(params=params.json().GET('objects')) 其中.GET返回一个响应对象,.json将其转换为字典,.GET返回该字典中“objects”键的值 我想要的是整个调用只返回一个我已经设置好的fixture。但是,当我尝试像self.worker.api.posts.get=Mock(return\u value=fi

我正在使用库将请求抽象到内部API。在我的代码中,
self.api
是一个吊床对象,我进行以下调用:

posts=self.api.posts().GET(params=params.json().GET('objects'))

其中.GET返回一个响应对象,.json将其转换为字典,.GET返回该字典中“objects”键的值

我想要的是整个调用只返回一个我已经设置好的fixture。但是,当我尝试像self.worker.api.posts.get=Mock(return\u value=fixture)这样的方法时,它不起作用。它调用实际的API


这是可能的,还是我应该放弃尝试模拟这样一个特定的调用,而只满足于模拟包含它的方法

您需要在模拟上设置所有
返回值。调用
self.api.posts()
时,将返回一个模拟,您希望获取此模拟并设置其返回值,该值将是一个具有
get()
方法的对象,您还希望在最后一次要模拟的调用之前模拟其返回值

下面是一个例子:

self.api.posts.return\u value.GET.return\u value.json.return\u value.GET=Mock(return\u value=fixture)

我的工作示例:

json\u obj=mock.MagicMock(返回值=self.hardcoced\u标签)
con.return\u value.repos.return\u value.labels.GET.return\u value.json=json\u obj

毫无疑问,模仿包含整个内容的方法会更干净。