System Under Test (SUT) - это та часть системы, которую мы рассматриваем как объект проверки в конкретном тесте.

Юнит-тестом называется тест, который, проверяет одну единицу поведения, делает это быстро и в изоляции от других тестов. Любой тест, не удовлетворяющий хотя бы одному из этих трёх критериев, относится к категории интеграционных. Термин юнит в юнит-тестах относится к единице поведения, а не кода. Объем кода, необходимый для такой единицы, не имеет значения.

Интеграционный тест- тест, который проверяет взаимодействие нескольких компонентов системы, чтобы убедиться, что они корректно интегрированы и выполняют ожидаемое поведение.

Проблема с термином «интеграционные тесты» в том, что им обозначают тесты с радикально разным объёмом и окружением SUT: от набора из двух модулей без Spring-контекста, одного модуля с Spring-контекстом, до целого монолита.
Чтобы однозначно указывать, какой именно SUT и тип теста имеют в виду, предлагается ввести отдельный термин - DUC-тесты.

Контрактные интеграционные тесты или DUC-тесты (Domain Usage Contract) - это интеграционные тесты, которые проверяют поведение приложения через публичный API, гарантируя соответствие контракту. В роли SUT в данном случае выступает всё приложение. В подобных тестах допускается исключение части функциональности через mock - это компромисс между полнотой проверки и скоростью/стабильностью тестов.

Внепроцессные зависимости в контексте тестирования:

  • Управляемые зависимости - “собственные” внепроцессные зависимости, находящиеся под полным контролем приложения. Пример: база данных, кеш.
  • Неуправляемые зависимости - внепроцессные зависимости, которые не находятся под полным контролем приложения. Пример: шина данных, api-gate, внешние сервисы - nbs, vps по отношению к compute.

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

Компонентные тесты - тесты, которые проверяют поведение одного компонента приложения, используя реальные неуправляемые внепроцессные зависимости.

E2E-тесты (end-to-end tests) - проверка методом чёрного ящика бизнес сценариев работы приложения с точки зрения конечного пользователя на реальном стенде (preprod, prod).

Источники:

testingducsutintegration_testing