Для начала ответьте на ваш вопрос: да, если вы спрашиваете меня, они, безусловно, являются частью непрерывной интеграции. Но я думаю, что нам нужно уточнить, что такое интеграционные тесты.
Мартин Фаулер говорил о непрерывной доставке как о способе автоматизации всего процесса сборки для быстрого развертывания. Это требует от разработчиков быстрой обратной связи, обеспечиваемой процессом непрерывной интеграции. Поэтому он определяет этапы, которые должна пройти сборка :
- фиксация сборки
- тщательное тестирование
- развертывание
Сборка коммита не должна занимать больше 10 минут, как он заявляет, из-за быстрой обратной связи с разработчиками.
Вот как я вижу вещи: на первом этапе извлеките последний коммит и соберите его. Если это успешно, вы запускаете свои модульные тесты, чтобы выяснить, работают ли ваши классы / группы классов, как определено и ожидается.
Когда это успешно, вы попадаете в часть тестирования интеграции. Здесь вы тестируете взаимодействие только что успешно протестированных модулей. Это включает подачу единиц на вход и отслеживание их состояния / взаимодействия / вывода. Помните, что мы все еще находимся в коммит-билде, поэтому мы хотим, чтобы это тоже было быстро. Поэтому взаимодействия с файловой системой, базой данных, сетевыми одноранговыми узлами и т. П. Должны быть заглушены для быстрого выполнения. Мартин Фаулер также намекает на использование баз данных в памяти, если они вам нужны, просто для быстрого выполнения на сервере CI.
После того, как вы убедились, что модули работают и взаимодействуют в соответствии с требованиями, вы обычно хотите узнать о тестовом покрытии (простого тестирования небольшой подсистемы обычно просто недостаточно) и сделать проверенные артефакты доступными для функционального тестирования / QA / развертывания ( прочитайте: тщательное тестирование), если вы думаете, что тесты охватывают достаточно вашей программы. Именно тогда вы предоставляете тестовую среду, которая отражает производственную среду, на которую вы нацелены, и запускаете тесты, которые включают реальную базу данных, реальные файлы, реальные сетевые одноранговые узлы и т. Д.
В конце концов, интеграционные тесты связаны с изменениями кода. Вы хотите убедиться, что сделанные вами изменения не нарушают текущую систему, а значит, они хорошо интегрируются. Чтобы выяснить, есть ли они, вам нужно убедиться, что они ведут себя правильно сами по себе, а затем, правильно ли они взаимодействуют со своими зависимостями, и проверялись ли они вообще. Вы можете быть уверены в своей системе после того, как пройдете все эти тесты.
Если на более поздних этапах возникнут какие-либо проблемы с вашей программой (например, когда ваша база данных вернет определенное значение, ваше сетевое соединение прекратит работу), вам следует попытаться отключить эти тесты в интеграционных тестах. Сборка коммитов скорее всего быстрее QA;)