Пирамида тестов
Пирамида тестов — модель того, сколько тестов какого вида должно быть в проекте. Чем выше уровень, тем тестов меньше — потому что они медленнее и дороже в поддержке.
<polygon points="130,80 230,80 270,140 90,140" fill="#BA7517" fill-opacity="0.15" stroke="#BA7517" stroke-opacity="0.6"/>
<text x="180" y="115" text-anchor="middle" font-size="12" fill="currentColor">Интеграционные</text>
<polygon points="90,140 270,140 320,200 40,200" fill="#16a34a" fill-opacity="0.15" stroke="#16a34a" stroke-opacity="0.6"/>
<text x="180" y="175" text-anchor="middle" font-size="12" fill="currentColor">Unit-тесты</text>
<text x="180" y="190" text-anchor="middle" font-size="10" fill="currentColor" opacity="0.6">много, быстрые</text>
- Unit-тесты (основание) — проверяют один класс/метод в изоляции, с моками вместо зависимостей. Быстрые (миллисекунды), их пишут больше всего.
- Интеграционные тесты (середина) — проверяют, что несколько компонентов работают вместе правильно (например, сервис + реальная тестовая база данных). Медленнее, их меньше.
- E2E (end-to-end, вершина) — проверяют всё приложение целиком, как реальный пользователь (через UI или полный HTTP-запрос). Самые медленные и хрупкие, их меньше всего.
Копнуть глубже
Почему именно пирамида, а не равное количество на каждом уровне. Чем выше уровень — тем тест:
- Медленнее — E2E может занимать секунды-минуты против миллисекунд у unit-теста;
- Более хрупкий — затрагивает больше компонентов сразу, и сломаться может из-за чего угодно (даже не связанного с тем, что реально тестируется);
- Сложнее диагностировать — упавший E2E-тест не сразу говорит, что именно сломалось, в отличие от точечного unit-теста.
Антипаттерн “перевёрнутая пирамида” (ice cream cone) — когда команда пишет в основном E2E-тесты, а unit-тестов мало. Результат: тесты медленные, хрупкие, долго выполняются на CI, и непонятно, что именно упало при падении. Здоровый баланс — это когда основание (unit) реально самое широкое.
🎤 Закрыл тему, если можешь объяснить:
• три уровня пирамиды и чем они отличаются по скорости и охвату;
• почему "перевёрнутая пирамида" — антипаттерн (если дошёл до 2-го слоя).
• почему "перевёрнутая пирамида" — антипаттерн (если дошёл до 2-го слоя).