Интеграционное тестирование

Что это такое

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

Почему это важно

Набор модульных тестов может быть целиком зелёным, а система при этом не работает. Каждый модуль ведёт себя правильно рядом со своей подменой, однако сама подмена — самый вероятный источник ошибки: её писали с тем же неверным представлением, что и код, который она заменяет. Интеграционные тесты и есть то место, где это представление вскрывается: дёшево, прямо в прогоне тестов, а не в среде, где живёт настоящая зависимость. Их меньше, чем модульных, и идут они медленнее — зато только они и способны показать, что части действительно стыкуются между собой.

Что в этом треке

  1. Тестирование через реальную границу (01-cs-fundamentals/21-integration-testing/01-testing-across-a-real-boundary) — какую границу пересекать, какую подменять и как удержать тест детерминированным.
  2. Фикстуры, базы данных и очистка (01-cs-fundamentals/21-integration-testing/02-fixtures-databases-and-cleanup) — как создать мир, нужный тесту, и оставить его точно таким, каким он был.

Предварительные требования

Что читать дальше

  • Модульное тестирование (01-cs-fundamentals/10-unit-testing) — изолированный слой, который интеграционный дополняет, и объяснение того, почему подделка может ошибаться.
  • Сквозное тестирование (01-cs-fundamentals/26-end-to-end-testing) — слой ещё дальше наружу: здесь прогоняют всю систему целиком, а не один стык.
  • Playwright (01-cs-fundamentals/27-playwright) — инструмент, к которому команды обычно приходят, когда тестируемая граница — браузер.