Python单元测试:避免API调用

时间:2016-06-13 12:34:14

标签: python unit-testing

我编写了一些调用SalesforceIQ API的代码。我现在正在尝试对我的代码进行单元测试(为每个函数编写单元测试)。我有点不确定如何解决这个问题,因为我需要做某些事情以避免进行API调用。

这是我正在尝试测试的一个示例函数:

def update_contact(name, phone, address, contact_id):
    contact = Contact(contact_id)
    set_contact_fields(contact, name, phone, address)
    return contact.update()

contact.update()是API调用。因此,我仍然希望避免在contact.update()测试update_contact时更新这三个字段(姓名,电话,地址)。

如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用patch(python2中的mock.patch,python3中的unittest.mock.patch来修补该方法:

@patch.object(Contact, 'update')
def test_api_call(self, update):
    # "update" is the patched method, instace of `MagicMock`
    update_contact('name', 'phone', 'address', 'contact_id')
    update.assert_called_once_with()

Python documentation

答案 1 :(得分:0)

__repr__()对象是否有__str__()Contact方法?如果没有,为什么不写一个?然后你可以打印contact并查看它是什么。如果您想进一步自动化测试,或者使用它返回的字符串执行其他操作。