Я пытаюсь выяснить, как создать модульные тесты для функции, поведение которой основано на стороннем сервисе.
Предположим, что функция выглядит следующим образом:
def sync_check():
delta_secs = 90
now = datetime.datetime.now().utcnow()
res = requests.get('<url>')
alert = SlackAlert()
last_value = res[-1]['date'] # Last element of the array is the most recent
secs = (now - last_value).seconds
if secs >= delta_secs:
alert.notify("out of sync. Delay: {} seconds".format(secs))
else:
alert.notify('in sync')
Как лучше написать модульный тест для этой функции?Мне нужно протестировать ветки if и else, но это зависит от стороннего сервиса.
Первое, что приходит мне в голову, - это создать фальшивый веб-сервер и указать на него (изменение URL), но этото, как кодовая база будет включать в себя логику тестирования, например:
if test:
url = <mock_web_server_url>
else:
url = <third_party_service_url>
Более того, модульное тестирование вызовет оповещения об ослаблении, что не должно происходить.
Так что я должен снова изменить кодовую базукак:
if secs >= delta_secs:
if test:
logging.debug("out of sync alert sent - testing mode")
else:
alert.notify("out of sync. Delay: {} seconds".format(secs))
else:
if test:
logging.debug("in sync alert sent - testing mode")
else:
alert.notify('in sync')
Что мне не очень нравится.
Мне не хватает какого-либо дизайна для решения этой проблемы?