Нет, ваш набор тестов не помогает, если сторонний сервис не работает.Но вы хотите полностью проверить свою интеграцию с сервисом.Следующая стратегия хорошо сработала для меня:
Изолировать сторонний сервис в модуле (скажем, класс, но, тем не менее, ваш языковой модуль хорошо работает), который делает как можно меньшепомимо инкапсуляции подключения к услуге.Напишите методы класса, чтобы можно было различить ошибки, которые являются ошибкой службы, и ошибки, которые являются вашей ошибкой.Например, присвойте исключениям для обслуживания общий суперкласс.
Напишите модульные тесты класса обслуживания так, чтобы
, если обслуживание прекращенопроисходит ошибка, тесты проходят, но регистрируются ошибки.
если возникает какая-либо другая ошибка, обычно происходит сбой.
Запишите эти тесты так, чтобы онибеги против живого сервиса.Этих тестов должно быть небольшое количество, поэтому они не должны создавать проблемы для времени выполнения набора тестов.
Заглушка или макет класса обслуживания из всех других тестов, включая интеграционные тесты.(Под «интеграционными тестами» здесь я имею в виду тесты, которые проверяют все уровни вашего собственного кода, а не взаимодействуют ли они со сторонним сервисом.)
При заглушении или насмешке над классом обслуживания из-за интеграциитесты, не заглушайте или не насмехайтесь над публичным API класса сервиса, а скорее заглушайте или насмехайтесь над неким более низким уровнем, возможно, внутренним методом класса сервиса или библиотекой, которую вы используете для подключения к сервису.Это предотвращает ошибки интеграции при вызове класса обслуживания.В модульных тестах создайте заглушку или смоделируйте открытый API класса обслуживания, как и любой другой класс.
Как предлагает Мартин Буберл, может быть полезно провести отдельный тестовый запуск интеграционных тестов, гдекласс обслуживания не заглушен и не вычеркнут.Если честно, это то, что обсуждалось во многих проектах, в которых я участвовал, но я не думаю, что это когда-либо было сделано.В случае сбоя сторонней службы мы всегда узнаем об этом из производственных ошибок (о которых сообщают службы мониторинга или поддержки клиентов), прежде чем узнаем об этом из испытаний.