Skip to content

Тестирование

Пирамида тестов

        ╱ E2E ╲           ← Мало, дорогие, медленные
       ╱───────╲
      ╱ Integr. ╲         ← Средне
     ╱───────────╲
    ╱  Unit Tests  ╲      ← Много, дешёвые, быстрые
   ╱─────────────────╲

Модульные тесты

Требования

  • Покрытие бизнес-логики: ≥ 80%
  • Быстрые: весь набор unit-тестов < 30 секунд
  • Изолированные: не зависят от внешних сервисов, БД, сети
  • Детерминированные: один и тот же результат при каждом запуске

Практики

  • Паттерн Arrange → Act → Assert
  • Один тест — один сценарий
  • Мокаем внешние зависимости через интерфейсы
  • Тестовые имена описывают сценарий: TestPayment_WhenInsufficientFunds_ReturnsError

Инструменты

ПлатформаФреймворк
Gotesting + testify
TypeScriptJest / Vitest
SwiftXCTest
KotlinJUnit 5 + MockK

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

Требования

  • Проверяют взаимодействие между компонентами
  • Используют реальные (или контейнеризированные) зависимости
  • Запускаются в CI на каждый PR

Практики

  • Testcontainers для запуска БД и сервисов
  • Отдельный CI-стейдж для интеграционных тестов
  • Каждый тест создаёт и очищает свои данные

E2E-тесты

Требования

  • Покрывают критические пользовательские сценарии
  • Запускаются на staging перед релизом
  • Максимум 20-30 сценариев (самые важные)

Практики

  • Page Object / Screen Object паттерн
  • Стабильные тестовые данные (fixtures/seeds)
  • Retry-механизм для flaky-тестов (но flaky — сигнал к починке)

Когда НЕ нужны тесты

  • Тривиальные getter/setter без логики
  • Сгенерированный код (protobuf, swagger)
  • Конфигурационные файлы

Метрики качества тестов

МетрикаЦелевое значение
Code Coverage (unit)≥ 80%
Mutation Score≥ 60%
Flaky Test Rate< 1%
CI Test Duration< 10 мин