嘲笑图书馆的一系列电话

时间:2014-03-13 17:44:34

标签: python unit-testing mocking

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

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

其中.GET返回一个响应对象,.json将其转换为字典,而.get返回'对象的值。键入该词典。

我想要的只是返回我已经设置的固定装置。但是,当我尝试类似self.worker.api.posts.get = Mock(return_value=fixture)的内容时,它并不起作用。它调用了实际的API。

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

1 个答案:

答案 0 :(得分:2)

您需要在模拟上设置所有return_values。当你调用self.api.posts()时,会返回一个模拟并且你想获得这个模拟并设置它的返回值,这将是一个具有GET()方法的对象,你也想要模拟它的返回值,直到你打算最后一次打电话。

以下是示例:

self.api.posts.return_value.GET.return_value.json.return_value.get = Mock(return_value=fixture)

我的工作范例:

json_obj = mock.MagicMock(return_value=self.hardcoced_labels) con.return_value.repos.return_value.labels.GET.return_value.json = json_obj