Тестирование в программировании

Jul 24, 2024

Запись лекции: Тестирование в программировании

Введение

  • Лектор: Саня, старший разработчик в Азот и Вектор.
  • Обсуждение значимости написания тестов в процессах разработки.

Проблемы разработчиков

  • Разработчики не понимают, что именно они хотят тестировать.
  • Происходят боли в том, как декомпозировать код и разделять его.
  • Основные жалобы:
    • Проблемы с кармой, интерфейсами системы типов, указателями.
    • Проблемы с тестированием.

Зачем писать тесты?

  • Тестирование связано с композицией и архитектурой приложения.
  • Необходимо понимать, какие тесты и на каком уровне писать:
    • Юнит-тесты: простые, дешевле всего писать.
    • Интеграционные тесты: сложнее, но обеспечивают всестороннюю проверку, включая взаимодействие компонентов.
    • E2E (End-to-End) тесты: дорогие в написании и поддержке, проверяют весь поток приложения.

Тестовая пирамида

  • Юнит-тесты на нижнем уровне (большее количество).
  • Интеграционные тесты на среднем уровне.
  • E2E тесты на верхнем уровне (меньше всего).

Основные концепции тестирования

  1. Модель данных (Entities): просто передаются между слоями без изменения.
  2. Бизнес-логика (Use Cases): основной уровень обработки данных.
  3. Контроллеры (Controllers): принимают входящие запросы и направляют их в бизнес-логику.

Виды тестов

  • Юнит-тесты: проверяют отдельные методы или функции.
    • Проверяют только функциональность метода, без гарантий на API.
  • Интеграционные тесты: проверяют работу нескольких компонентов вместе.
  • E2E тесты: проверяют всю систему в целом (например, интернет-магазин).

Применение тестов

  • Нужно начинать с простых юнит-тестов.
  • Игнорирование тестов может привести к поломке функционала программы.
  • Понимание того, где можно написать эффективные и простые тесты.

Пример: тестирование валидации

  • Написание тестов для проверки данных на уровне валидации.
  • Простые юнит-тесты могут существенно улучшить защиту от ошибок.

Что такое тестовые двойники?

  • Фейки: упрощенные реализации интерфейсов.
  • Стабы: заранее подготовленные ответы от зависимостей.
  • Моки: тягуют желание поведения, могут эмулировать различные ответы на тестовые запросы.

Написание тестов

  • Примеры тестов на валидацию.
  • Как правильно организовать и структурировать тесты.
  • Проверка успешных и неуспешных сценариев использования.

Подводя итог

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