2016-09-08 4 views
1

Я читал несколько раз, что нужно использовать mock, чтобы имитировать внешние вызовы, и не должно быть никаких вызовов, сделанных для любой внешней службы, потому что ваши тесты должны выполняться независимо от внешних служб.Python/Django unittest, как обращаться с внешними вызовами?

Это полностью имеет смысл .... НО

насчет внешних услуг изменяющимися? Какой хороший тест, проверка того, что мой код работает так, как если бы я никогда не узнал, когда он сломается из-за изменения внешней службы/обновления/удаления/устаревания/etc ...

Как это можно смириться? Псевдокод ниже

function post_tweet: 
    data = {"tweet":"tweetcontent"} 
    send request to twitter 
    receive response 
    return response 

Если я издеваться этого нет никакого способа, я буду уведомлен, что щебет изменил свой API, и теперь я должен обновить мой тест ...

ответ

3

Существуют различные уровни тестирования.

Ед. Изм. испытывают, как вы могли догадаться, из названия, единицы. Это, например, функция или метод, возможно, класс. Если вы интерпретируете его более широко, это может включать проверку, которую нужно протестировать с помощью тестового клиента Djangos. Unittests никогда не тестируют внешние материалы, такие как библиотеки, зависимости или интерфейсы для других систем. Тезисы будут издеваться.

Тесты интеграции проверяют, правильно ли реализованы интерфейсы и использование внешних библиотек, систем и API. Если изменения зависимостей, вы заметите, что вам придется менять код и модульные тесты.

Существуют и другие уровни тестов, такие как тесты поведения, тесты пользовательского интерфейса, тесты юзабилити. Вы должны обязательно отделить тезисы тестов в своем проекте.

+0

Дальнейшее предложение: ** mock ** внешние вызовы twitter для вашего ** unit test **, чтобы проверить ваш код. Затем используйте ** Интеграционные тесты **, в которых вы фактически назовете услугу Twitter, и этот тип теста позволит вам узнать, изменилось ли сервис Twitter. –

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