Python 模拟跨库的调用链
我正在使用库将请求抽象到内部API。在我的代码中,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
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
毫无疑问,模仿包含整个内容的方法会更干净。