Middle+
41
questionbank

Как должен выглядеть идеальный подход к разработке через тестирование (TDD)?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Идеальный подход к TDD цикличен и состоит из трех основных шагов:

  1. Красный (Red):

    • Написать тест, который проверяет функциональность, которую ещё нет (или которая не работает).
    • Запустить все тесты. Этот новый тест должен упасть (fail), что и символизирует "красное" состояние. Это подтверждает, что тест действительно проверяет отсутствие требуемой функциональности.
  2. Зеленый (Green):

    • Написать минимально необходимый код для прохождения этого нового теста.
    • Запустить все тесты снова. Все тесты, включая новый, должны пройти (pass), что символизирует "зеленое" состояние. Цель на этом этапе – добиться прохождения тестов, а не написания идеального кода.
  3. Рефакторинг (Refactor):

    • Улучшить код, который был написан на предыдущем шаге. Это включает в себя очистку, повышение читаемости, устранение дублирования, улучшение структуры – всё, что не нарушает проходимость тестов.
    • Запустить все тесты ещё раз, чтобы убедиться, что изменения не сломали существующую функциональность. Тесты должны оставаться "зелеными".

После этого цикл повторяется для следующего фрагмента функциональности.

Ключевые аспекты идеального подхода:

  • Маленькие шаги: Добавление небольших, инкрементальных изменений как в тестах, так и в коде.
  • Быстрая обратная связь: Частый запуск тестов для оперативного получения информации о состоянии системы.
  • Фокус на поведении: Тесты фокусируются на ожидаемом поведении системы, а не на внутренней реализации.
  • Покрытие кода: TDD естественным образом ведет к высокому покрытию кода тестами.
  • Документация: Тесты служат живой документацией о том, как должен работать код.
  • Уверенность: Наличие полного набора проходящих тестов дает уверенность при рефакторинге и внесении изменений.

Пример цикла Red/Green/Refactor в JS:

  1. Red: Написать тест для функции сложения, которая ещё не существует.
    javascript
  2. Green: Создать минимальную функцию, чтобы тест прошел.
    javascript
    Запустить тесты. Они пройдут.
  3. Refactor: В данном случае код достаточно прост, рефакторинг может быть минимальным или отсутствовать. Если функция была бы сложнее, здесь было бы место для оптимизации или улучшения читаемости. Запустить тесты снова. Они должны пройти.

Затем перейти к следующему требованию (например, обработка отрицательных чисел или нечисловых аргументов) и начать новый цикл Red/Green/Refactor.