2016-06-13 2 views
0

Я написал код, который вызывает вызовы API SalesforceIQ. Теперь я пытаюсь выполнить тестирование моего кода (написав единичный тест для каждой из моих функций). Я немного не уверен, как это сделать, поскольку мне нужно сделать что-то, чтобы избежать вызовов API.Тестирование модуля Python: устранение вызовов 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 обновляет эти три поля (имя, телефон, адрес).

Любые рекомендации по поводу этого?

Спасибо!

ответ

1

Вы можете использовать patch (mock.patch в python2, unittest.mock.patch в Python3) залатать этот метод:

@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.

+0

Я читаю документы, но не мог бы вы немного доработать? Благодаря! – bclayman

+1

Временно (для продолжительности теста) заменяет метод экземпляром 'MagicMock'. «MagicMock» - это объект, с которым вы можете свободно манипулировать (например, установить возвращаемое значение, заставить его создавать исключения, задавать свойства и т. Д.) И утверждать на него вызовы. Этот объект передается в качестве первого аргумента вашей тестовой функции, чтобы вы могли проверить, как используется тестируемый код. – Anonymous

+0

Спасибо за помощь. Я не полностью следую вашему примеру. Вы вызываете «update_contact», а затем утверждаете, что обновление вызывается один раз. Но у меня нет метода обновления, у меня есть метод update_contact ... – bclayman

0

Есть ли __repr__() или __str__() метод для объекта Contact? Если нет, то почему бы не написать его? Затем вы можете просто распечатать contact и посмотреть, что это такое. Или сделайте что-нибудь еще с возвращаемой строкой, если хотите продолжить автоматизацию тестирования.

Смежные вопросы